Spring Boot JPA – configuration自动重新连接
我有一个不错的小弹簧引导jpa web应用程序。 它被部署在亚马逊豆茎上,并使用亚马逊rds来保存数据。 然而,经常会有这样一个例外,那里不是那么经常使用的:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 79,870,633 milliseconds ago. The last packet sent successfully to the server was 79,870,634 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
我不知道如何configuration这个设置,并且在http://spring.io上找不到关于它的信息(虽然是一个很好的网站)。 任何人有一些想法或信息的指针?
我假设启动为你configurationDataSource
。 在这种情况下,由于您正在使用MySQL,因此您可以将以下内容添加到您的application.properties
最高为1.3
spring.datasource.testOnBorrow=true spring.datasource.validationQuery=SELECT 1
正如djxak在注释中提到的那样,1.4+为Spring Boot支持的四个连接池定义了特定的命名空间: tomcat
, hikari
, dbcp
, dbcp2
( dbcp
从1.5开始已弃用)。 您需要检查您正在使用的连接池,并检查是否支持该function。 上面的例子是用于tomcat的,所以你必须在1.4+中编写如下代码:
spring.datasource.tomcat.testOnBorrow=true spring.datasource.tomcat.validationQuery=SELECT 1
请注意, 不build议使用autoReconnect
:
不build议使用此function,因为它在应用程序不能正确处理SQLExceptions时会产生与会话状态和数据一致性相关的副作用,并且只能在您无法configuration应用程序以处理由SQLException导致的SQLException时使用死了和陈旧的连接。
以上build议对我不起作用。 真正有效的是在application.properties中包含了以下几行
spring.datasource.testWhileIdle = true spring.datasource.timeBetweenEvictionRunsMillis = 3600000 spring.datasource.validationQuery = SELECT 1
你可以在这里find解释
我刚搬到Spring Boot 1.4,发现这些属性被重命名为:
spring.datasource.dbcp.test-while-idle=true spring.datasource.dbcp.time-between-eviction-runs-millis=3600000 spring.datasource.dbcp.validation-query=SELECT 1
我有类似的问题。 Spring 4和Tomcat 8.我用Springconfiguration解决了这个问题
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <property name="initialSize" value="10" /> <property name="maxActive" value="25" /> <property name="maxIdle" value="20" /> <property name="minIdle" value="10" /> ... <property name="testOnBorrow" value="true" /> <property name="validationQuery" value="SELECT 1" /> </bean>
我testing过了。 它运作良好! 这两行为了重新连接数据库而做了一切事情:
<property name="testOnBorrow" value="true" /> <property name="validationQuery" value="SELECT 1" />
- 如何实例化一个在Spring框架中使用generics的对象?
- SpringMVC可以configuration为处理所有请求,但排除静态内容目录吗?
- Spring MVC中的@RequestParam处理可选参数
- 当find多个匹配的bean时,Spring如何通过名称自动装载?
- 在多个项目/模块中使用多个属性文件(通过PropertyPlaceholderConfigurer)
- 如何在绑定spring mvc命令对象时自定义参数名称
- 有没有办法在Spring XML中指定一个默认的属性值?
- SpringMVC RequestMapping GET参数
- 根据.properties文件中的属性导入Springconfiguration文件