【发布时间】:2015-06-08 10:07:05
【问题描述】:
我正在开发一个使用 dbcp 数据库连接池的 Spring MVC Web 应用程序。
<bean id="datasourceAR_XXX" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" scope="singleton">
<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="url"><value>jdbc:oracle:thin:@XXX.XXX.com:1500:SERVICE</value></property>
<property name="maxActive"><value>100</value></property>
<property name="maxIdle"><value>10</value></property>
<property name="username"><value>XXX</value></property>
<property name="password"><value>XXX</value></property>
</bean>
我最近将这些 bean 的范围移动到 singleton,因为每个会话的连接量开始有点过多。
问题是:
我们的数据库每周日都会关闭,而 Spring 应用程序的行为似乎很奇怪,因为它使套接字保持打开状态,并且没有像我想象的那样刷新连接。
有没有办法以每天刷新连接且不必在每个星期一重新启动应用程序的方式刷新范围为单例的 bean?
【问题讨论】:
-
使用验证查询来验证连接。如果验证失败,连接将被删除并创建一个新连接。这样你就不需要重新启动任何东西......
-
事实上,我们遇到了问题,因为连接器似乎正在等待,并且在任何时候都没有给出任何错误......它只是阻塞。当您说验证查询时,您到底在说什么?这只是对数据库的简单查询还是 Spring 提供的东西?
-
你的数据源提供了这个。你读过the documentation吗?但是,我也建议使用不同的连接池,例如 HikariCP
-
感谢 Deinum!我错过了也有超时参数的验证查询参数,所以它很完美!虽然不知道如何确定您的答案:)
标签: spring singleton refresh javabeans apache-commons-dbcp