一尘不染

Spring Boot JPA-配置自动重新连接

spring

我有一个不错的Spring Boot JPA Web应用程序。它部署在Amazon Beanstalk上,并使用Amazon RDS保留数据。但是,它并不经常使用,因此在一段时间后由于以下异常而失败:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收到的最后一个数据包是79,870,633毫秒之前。
成功发送到服务器的最后一个数据包是79,870,634毫秒之前。大于服务器配置的值“ wait_timeout”。你应考虑在应用程序中使用连接之前使连接有效性到期和/或对其进行测试,或者增加服务器为客户端超时配置的值,或者使用Connector / J连接属性’autoReconnect = true’来避免此问题。

我不确定如何配置此设置,也无法在http://spring.io(虽然这是一个很好的网站)上找到有关此信息。有什么想法或指向信息的指针?


阅读 1166

收藏
2020-04-11

共1个答案

一尘不染

我认为引导正在DataSource为你配置。在这种情况下,由于你使用的是MySQL,因此你最多可以将以下内容添加application.properties到1.3中

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

如djxak在注释所指出的,用于四个连接池弹簧引导支撑1.4+定义了特定的名称空间:tomcat,hikari,dbcp,dbcp2(dbcp被弃用的1.5)。你需要检查使用的连接池,并检查是否支持该功能。上面的示例是针对tomcat的,因此你必须在1.4+中编写如下代码:

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

请注意,使用的autoReconnect是不建议:

不建议使用此功能,因为当应用程序无法正确处理SQLExceptions时,它具有与会话状态和数据一致性相关的副作用,并且仅设计用于无法配置应用程序来处理由以下原因导致的SQLExceptions时使用死的和陈旧的连接正确。

2020-04-11