Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Singleton pattern: Một connection MySQL cho toàn ứng dụng Java

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 synchronized hoặc volatile + 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.