我有一个应用程序,其中DB连接是由Spring配置创建的(然后传递给hibernate)。以下是春季文件中的默认参数。
<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="url">
<value>${dbUrl}</value>
</property>
<property name="username">
<value>${dbUser}</value>
</property>
<property name="password">
<value>${dbPassword}</value>
</property>
</bean>但是,在特定环境中,Oracle DB连接在一定时间后会被网络设置关闭。我们最初认为连接的关闭是因为连接处于空闲状态。我们添加了validationQuery,以便定期在服务器上发布一个查询,这样连接就不会空闲。
<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="url">
<value>$dbUrl</value>
</property>
<property name="username">
<value>$dbUser</value>
</property>
<property name="password">
<value>$dbPassword</value>
</property>
<property name="validationQuery">
<value>SELECT 1 FROM dual</value>
</property>
<property name="testWhileIdle">
<value>true</value>
</property>
<property name="testOnReturn">
<value>true</value>
</property>
<property name="timeBetweenEvictionRunsMillis">
<value>1000</value>
</property>
</bean>我的问题是,添加validationQuery是否保证连接不是空闲的?应用程序在第一次登录尝试中失败,没有抛出任何DB连接;但是在2-3次尝试之后才能工作。不知道这里发生了什么。
发布于 2016-04-15 20:01:50
validationQuery仅用于测试从连接池检索到的连接。请参阅:https://commons.apache.org/proper/commons-dbcp/configuration.html
此外,我还看到了org.apache.commons.dbcp.BasicDataSource和甲骨文(11和12)的一些奇怪行为。与org.apache.tomcat.dbcp.dbcp.BasicDataSource相比,我们的稳定性要好得多。配置选项非常接近(可能相同吗?)对于commons实现,因此转换是一个简单的过程。
发布于 2016-04-15 21:40:08
另外,C3P0连接池库比DBCP要好得多。我在过去一直有问题与DBCP,自从切换到C3P0至今没有任何问题..。
http://www.mchange.com/projects/c3p0/
https://stackoverflow.com/questions/36653424
复制相似问题