Spring 超时后抛出 "ERROR SqlExceptionHelper: Already closed"

Spring Throws "ERROR SqlExceptionHelper: Already closed" after timeout

我在服务器 (Tomcat 8.5) 上托管了一个 spring 应用程序。如果没有人使用它,它就会闲置。我已经知道如果数据库处于空闲状态 8 小时(默认超时 MySQL),将会发生超时。如 Spring Autoreconnect and post i have tried the solution available here 中所述。我已尝试配置 application.properties,但这并没有解决问题。

(PS:除了我的 Spring 应用程序中的 application.properties,我没有更改任何其他内容。

好吧如果这个

spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.validationQuery = SELECT 1

或这个

spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1

没用也许试试这个

Post SpringBoot 1.4 名称已更改

他们为四个连接池定义了新的特定命名空间 spring 支持:tomcat、hikari、dbcp、dbcp2。

spring.datasource.tomcat.testOnBorrow=true
spring.datasource.tomcat.validationQuery=SELECT 1

如果在 application.properties 中包含属性后问题仍未解决,那么在位于 src/main/resources[= 的 application-context.xml 中包含 testOnBorrow,validationQuery 时问题将得到解决11=]

<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 并提供 [ 来验证从线程池借用的连接线程=15=]validationQuery.