超时后,春季引发“ ERROR SqlExceptionHelper:已关闭”

时间:2019-11-19 05:05:11

标签: java mysql spring hibernate tomcat8

我在服务器(Tomcat 8.5)上托管了一个spring应用程序。如果没有人使用它,它将变为空闲状态。我已经知道,如果数据库处于空闲状态8小时(MySQL的默认超时),则会发生超时。正如Spring AutoreconnectConnection lost overnight中提到的那样,我已经尝试了here可用的解决方案。我已经尝试配置application.properties,但这并没有为问题带来任何解决方案。

(PS:我在Spring Application中没有更改application.properties以外的任何内容)。

2 个答案:

答案 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 来验证从线程池借用的连接线程>。