사용자 도구

사이트 도구


java:database:connectionpool

Java JDBC Connection Pool / DataSource

DataSource 초기화

  • DataSource 객체를 생성한다 해도 실제 connection을 맺기 전까지는 DB 접속을 하지 않는다.
  • SpringFramework BeanBeanPostProcessor#postProcessAfterInitialization를 사용하여 DataSource Bean이 모두 생성 완료 된 뒤에 Bean의 실제 구현체 클래스 여부(예를들어 DBCP의 경의 BasicDataSource)를 확인하여 dataSource.getConnection()을 맺고 끊어주면 Spring Application이 다 뜨기 전에 미리 최소한의 커넥션이 맺어진 상태의 DataSource가 되어 서비스 오픈 직후 갑작스런 트래픽에 대응할 수 있게 된다.
  • 혹은 Map<String, DataSource> dataSources로 모든 DataSource를 Injection 받은 Bean에서 @PostConstruct로 초기화 할 수도 있다.

기본 설정

  • 커넥션의 최대 생존시간(보통 maxAge)를 항상 설정한다.
  • maxActivemaxIdle을 동일하게 설정해야 할 것 같음. 안 그러면 부하가 몰렸다가 빠질 때 maxIdle이 작을 경우 커넥션을 일괄 반환하는 일이 생길 것으로 예상됨. pool별로 확인 필요.
  • validationQuery 는 JDBC 4 구현 드라이버 부터는 지정하지 않는것이 성능에 더 좋다.
  • validationQueryTimeout 은 항상 1초 정도로 지정할 것. Connection.isValid(int timeout) 에서 사용한다.

참조

java/database/connectionpool.txt · 마지막으로 수정됨: 2018/05/30 18:46 저자 kwon37xi