@Slf4j
public class ConnectionTest {
@Test
void dataSourceConnectionPool() throws SQLException, InterruptedException {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setMaximumPoolSize(10);
dataSource.setPoolName("MyPool");
userDataSource(dataSource);
}
private void userDataSource(DataSource dataSource) throws SQLException {
Connection con1 = dataSource.getConnection();
Connection con2 = dataSource.getConnection();
log.info("connection = {}, class = {}", con1, con1.getClass());
log.info("connection = {}, class = {}", con2, con2.getClass());
}
}
먼저 히카리DataSource를 생성한다.
그다음에 설정을 해준다.
url, username(db에 로그인 할), password, 풀의 최대 크기, 풀의 이름(안하면 그냥 기본으로 설정됨. 뭐 default 이런거 일려나?)
이렇게 설정을 하면, 커넥션 풀에 커넥션 10개가 생긴거임.
참고로 이거 비동기임.
이게 커넥션 만드는 게 외부 DB와 소통하면서 만드는 거라 좀 걸릴 수 있어서, 비동기로 만듦.
만약 getConnection 했을 때 줄 커넥션이 없다면?
그럼 block하면서 기다려준다고 함.
기본값은 30초인데, 그동안 획득되면 획득 되는거고, 그 동안에도 획득이 안되면 SQLTransientConnectionException 해서 에러를 뿜게 함.
참고로 저 기본값 30초 말고도 설정할 수 있음.
고객에게 30초 기다리게 하는 건 좀 그렇고,
'스프링 > 5. 스프링 DB-1' 카테고리의 다른 글
13. 트랜잭션 (0) | 2023.09.28 |
---|---|
12. 커넥션 풀 적용 (0) | 2023.09.28 |
10. DataSourceDriverManager (0) | 2023.09.28 |
9. DataSource (0) | 2023.09.28 |
8. 커넥션 풀 (0) | 2023.09.28 |