DBCP 란?
DB Connection 객체를 미리 만들어 Connection Pool에 보관하고 필요할 때마다
DB에 연결된 Connection을 꺼내 사용하는 것을 의미한다.
DBCP 사용목적
Connection Pool을 사용하는 이유는 Connection 객체를 만드는 것이
큰 비용을 소모하는 작업이기 때문이다.미리 만들어진 Connection을 재사용하여 CPU의 부담과 Connection을
생성하는데 필요한 시간을 줄일 수 있다.
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
public class DataSource {
private static HikariConfig config = new HikariConfig();
private static HikariDataSource ds;
public static final String JDBC_URL = "jdbc_url";
public static final String USER = "user";
public static final String PASSWORD = "password";
static {
config.setJdbcUrl(URL);
config.setUsername(USER);
config.setPassword(PASSWORD);
ds = new HikariDataSource(config);
}
private DataSource() {}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
@Test
void connectionTest() throws SQLException {
DataSource.getConnection();
}
@Test
void selectQueryTest() {
String selectQuery = "SELECT 1";
int result = 0;
try(Connection con = DataSource.getConnection();
PreparedStatement pst = con.prepareStatement(selectQuery);
ResultSet rs = pst.executeQuery()) {
while(rs.next()) {
result = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
assertEquals(1, result);
}