I have a basic Spring JDBC application with a pretty basic configuration:
<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@1.1.1.1:1521:XXX"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>
<bean id="dbThing" class="com.DbThing">
<property name="dataSource" ref="myDataSource"/>
</bean>
I would like to introduce a connection pool, and after reading several threads on SO I am a bit confused about which pooling library to use.
The libraries that seem to have more credits on SO are C3P0 and DBCP. Since I'm using Oracle, I could also use the pooled data source offered by the driver.
I understand that there are more libraries available – for instance the new Apache Tomcat 7 pooling libraries.
Is there any library that I should really avoid?
Is there any recommended configuration I should use with a given library?
Any "war story" you care to share?
Best Answer
C3PO and DBCP development have stalled mostly because they are mature. I have seen both of these drivers be able to support hundreds of transactions per second.
The Tomcat pool is a reworked & updated DBCP driver. MyBatis 3.0 also contains it's own pooling implementation which, based on code inspection, seems solid. Finally, there's BoneCP which claims to have the best performance. I haven't used any of these on a project yet.
Probably the best advice is to pick any of them test it. Spring makes it easy to swap out later.