我在服务器(Tomcat 8.5)上托管了一个spring应用程序。如果没有人使用它,它将变为空闲状态。我已经知道,如果数据库处于空闲状态8小时(MySQL的默认超时),则会发生超时。正如Spring Autoreconnect和Connection lost overnight中提到的那样,我已经尝试了here可用的解决方案。我已经尝试配置application.properties,但这并没有为问题带来任何解决方案。
(PS:我在Spring Application中没有更改application.properties以外的任何内容)。
答案 0 :(得分:0)
好吧
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.validationQuery = SELECT 1
或此
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
辛勤工作可以尝试
帖子SpringBoot 1.4的名称已更改
他们为spring支持的四个连接池定义了新的特定命名空间:tomcat,hikari,dbcp,dbcp2。
spring.datasource.tomcat.testOnBorrow=true
spring.datasource.tomcat.validationQuery=SELECT 1
答案 1 :(得分:0)
如果即使在包括了application.properties中的属性之后问题仍然无法解决,那么当在位于src / main / resources的application-context.xml中包括testOnBorrow,validationQuery时,问题将得到解决
<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${database.driver.classname}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
<property name="initialSize" value="2"/>
<property name="maxActive" value="50"/>
<property name="maxIdle" value="5"/>
<property name="maxWait" value="-1"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="600"/>
<property name="logAbandoned" value="true"/>
<property name="testOnBorrow" value="true" />
<property name="validationQuery" value="SELECT 1" />
</bean>
解决方案是通过启用 testOnBorrow 并提供 validationQuery 来验证从线程池借用的连接线程>。