Tóm tắt
Sử dụng mẫu thiết kế Singleton để đảm bảo chỉ có một đối tượng Connection chia sẻ cho toàn bộ ứng dụng Java-MySQL.
Mã Java
ConnectDatabase.java
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectDatabase {
private static Connection conn = null;
public static Connection getConnection() {
if (conn != null) return conn;
String database = "test";
String user = "root";
String password = "123456";
return getConnection(database, user, password);
}
private static Connection getConnection(String db, String user, String pass) {
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // Driver mới cho MySQL 8+
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/" + db + "?user=" + user + "&password=" + pass + "&useSSL=false");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
CallConnection.java
import java.sql.Connection;
public class CallConnection {
public static void main(String[] args) {
Connection con = ConnectDatabase.getConnection();
if (con != null) {
System.out.println("Connection successful !!!");
}
}
}
Kết quả chạy
Connection successful !!!
(Có thể có warning SSL – thêm useSSL=false vào URL để tắt).
Cải tiến cho production
- Thread-safe: Dùng
synchronizedhoặcvolatile+ double-checked locking. - Connection pool: Thay Singleton bằng HikariCP, DBCP2, Tomcat JDBC Pool – quản lý nhiều connection, tái sử dụng, timeout, validation.
- Đóng connection: Singleton không đóng – cần shutdown hook hoặc try-with-resources cho từng thao tác.
- Cấu hình ngoài: Đọc URL, user, pass từ file properties/yaml, không hardcode.
Lưu ý
Singleton connection đơn giản chỉ phù hợp cho ứng dụng nhỏ, single-thread, học tập. Production bắt buộc dùng connection pool.