HikariCP를 가지는 객체는 메모리에 하나만 있으면 좋겠다. 메모리에 하나만 있는 객체를 우리는 ‘싱글턴’ 객체라고 한다.

public class 클래스명 { //2) private static 하게 자기 자신 인스턴스를 참조하는 변수를 선언 private static 클래스명 instance = new 클래스명();

//3) 2에서 선언한 객체를 리턴하는 static메소드를 제공 
public static 클래스명 getInstance(){
    return instance;
}

//1) private 생성자를 만든다.
private 클래스명(){
    // 초기화 코드 
} }

사용방법


public class DBUtil {
    private static HikariConfig config = null;
    private static DataSource ds = null;
    private static DBUtil instance = new DBUtil();

    private DBUtil(){
        String configFile = "/datasource.properties";
        HikariConfig config = new HikariConfig(configFile);

//        HikariConfig config = new HikariConfig();
//        config.setDriverClassName("com.mysql.cj.jdbc.Driver");
//        config.setJdbcUrl("jdbc:mysql://localhost:3306/connectdb?useUnicode=true&characterEncoding=UTF-8");
//        config.setUsername("connect");
//        config.setPassword("connect");

        ds = new HikariDataSource(config);
    }

    public static DBUtil getInstance(){
        return instance;
    }

    public Connection getConnection(){
        Connection conn = null;
        try {
            conn = ds.getConnection();
        }catch(Exception ex){
           ex.printStackTrace(); // 로그를 남기는 코드가 있어야 한다.
           throw new RuntimeException("DB연결을 할 수 없습니다.");
        }
        return conn;
    }

    public static void close(ResultSet rs, PreparedStatement ps, Connection conn){
        try{ rs.close(); } catch(Exception ignore){}
        close(ps, conn);
    }

    public static void close(PreparedStatement ps, Connection conn){
        try{ ps.close(); } catch(Exception ignore){}
        try{ conn.close(); } catch(Exception ignore){}
    }
}