【发布时间】:2016-04-15 17:30:22
【问题描述】:
我有一个应用程序,其中数据库连接由 Spring 配置创建(然后传递给休眠)。以下是我们spring文件中的默认参数。
<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 数据库连接会在一段时间后被网络设置关闭。我们最初认为关闭连接是因为连接处于空闲状态。我们添加了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>
- 即使经过上述设置,连接仍然会关闭。
- 还观察到,当应用程序空闲 2-3 小时(不同)时,验证查询停止在服务器上执行,然后连接被网络设置关闭。
我的问题是添加validationQuery 保证,连接不是空闲的吗? 应用程序在第一次登录尝试时失败,没有数据库连接;但在 2-3 次尝试后有效。不知道这里发生了什么。
【问题讨论】:
标签: java spring hibernate apache-commons-dbcp