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.
我在服务器 (Tomcat 8.5) 上托管了一个 spring 应用程序。如果没有人使用它,它就会闲置。我已经知道如果数据库处于空闲状态 8 小时(默认超时 MySQL),将会发生超时。如 Spring Autoreconnect and
(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.