====== Java JDBC Connection Pool / DataSource ====== * [[java:database:dbcp|DBCP - Java Connection Pool]] * [[java:database:tomcat_pool|Tomcat JDBC Pool]] * [[java:database:hikaricp|HikariCP]] * [[java:database:bonecp|BoneCP]] - Deprecated ===== DataSource 초기화 ===== * DataSource 객체를 생성한다 해도 실제 connection을 맺기 전까지는 DB 접속을 하지 않는다. * [[springframework:bean|SpringFramework Bean]]의 ''BeanPostProcessor#postProcessAfterInitialization''를 사용하여 DataSource Bean이 모두 생성 완료 된 뒤에 Bean의 실제 구현체 클래스 여부(예를들어 DBCP의 경의 ''BasicDataSource'')를 확인하여 ''dataSource.getConnection()''을 맺고 끊어주면 Spring Application이 다 뜨기 전에 미리 최소한의 커넥션이 맺어진 상태의 DataSource가 되어 서비스 오픈 직후 갑작스런 트래픽에 대응할 수 있게 된다. * 혹은 ''Map dataSources''로 모든 ''DataSource''를 Injection 받은 Bean에서 ''@PostConstruct''로 초기화 할 수도 있다. ===== 기본 설정 ===== * 커넥션의 최대 생존시간(보통 ''maxAge'')를 항상 설정한다. * ''maxActive''와 ''maxIdle''을 동일하게 설정해야 할 것 같음. 안 그러면 부하가 몰렸다가 빠질 때 ''maxIdle''이 작을 경우 커넥션을 일괄 반환하는 일이 생길 것으로 예상됨. pool별로 확인 필요. * validationQuery 는 JDBC 4 구현 드라이버 부터는 지정하지 않는것이 성능에 더 좋다. * validationQueryTimeout 은 항상 1초 정도로 지정할 것. ''Connection.isValid(int timeout)'' 에서 사용한다. ===== 참조 ===== * [[http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency|Configuring the High Concurrency JDBC Connection Pool]]