스프링/5. 스프링 DB-1

11. 히카리 커넥션 풀

sdafdq 2023. 9. 28. 16:53
@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