春季 JDBC 连接池最佳实践

我有一个基本的Spring JDBC应用程序,具有非常基本的配置:

<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>

我想介绍一个连接池,在阅读了SO的几个线程之后,我对使用哪个池库有点困惑。

似乎在SO上拥有更多学分的库是C3P0DBCP。由于我使用的是 Oracle,因此我还可以使用驱动程序提供的池数据源

我知道有更多的库可用 - 例如新的Apache Tomcat 7池化库。

有没有我应该真正避免的库?

是否有任何建议配置我应该与给定的库一起使用?

您想分享任何“战争故事”吗?


答案 1

C3PO和DBCP的开发之所以停滞不前,主要是因为它们已经成熟。我已经看到这两个驱动程序能够支持每秒数百个事务。

Tomcat池是一个重新设计和更新的DBCP驱动程序。MyBatis 3.0还包含它自己的池化实现,基于代码检查,看起来很可靠。最后,BoneCP声称具有最佳性能。我还没有在项目上使用过其中任何一个。

也许最好的建议是选择他们中的任何一个进行测试。弹簧使以后更换变得容易。


答案 2

作为BoneCP的替代方案,您是否尝试过Oracle自己的数据库连接池?

在过去的几周里,我有很好的经验,所以可能值得试一试 - 另外,我想Oracle会知道一两件事关于建立连接池,特别是当与他们自己的数据库配对时。

<bean id="dataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
    <property name="URL" value="${jdbc.url}" />
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

更新:此外,如果您使用的是(其中之一)最新的Oracle JDBC驱动程序(11.2.0.1 +),则可能需要试用新的通用连接池。似乎已被正式弃用,以支持此池。但是,一些用户报告了使用它的错误,因此可能为时过早。我可以使用Oracle最新的JDBC驱动程序,因此一旦有任何相关信息,我将尝试并在此处进行更新。OracleConnectionPoolDataSource

有关此 SO 线程的更多信息:Oracle UCP


推荐