sto*_*fer 102 configuration spring spring-boot
我有一个很好的小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上找到相关信息(虽然这是一个非常好的网站).有哪些想法或信息指针?
Ste*_*oll 133
我假设启动正在DataSource为您配置.在这种情况下,由于您使用的是MySQL,因此可以将以下内容添加到application.properties最多1.3
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
Run Code Online (Sandbox Code Playgroud)
如djxak在注释所指出的,1.4+定义了特定的命名空间的四个连接池弹簧Boot支持:tomcat,hikari,dbcp,dbcp2(dbcp被弃用的1.5).您需要检查您正在使用的连接池,并检查是否支持该功能.以上示例适用于tomcat,因此您必须在1.4+中按如下方式编写它:
spring.datasource.tomcat.testOnBorrow=true
spring.datasource.tomcat.validationQuery=SELECT 1
Run Code Online (Sandbox Code Playgroud)
请注意,使用的autoReconnect是不建议:
建议不要使用此功能,因为当应用程序无法正确处理SQLExceptions时,它会产生与会话状态和数据一致性相关的副作用,并且仅在您无法配置应用程序以处理由此产生的SQLExceptions时使用.死和陈旧的连接正确.
Sou*_*mya 27
以上建议对我不起作用.真正有效的是在application.properties中包含以下行
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 3600000
spring.datasource.validationQuery = SELECT 1
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到解释
我刚刚转到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
Run Code Online (Sandbox Code Playgroud)
spring.datasource.tomcat.testOnBorrow=trueapplication.properties中的设置不起作用.
以编程方式设置如下工作没有任何问题.
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
@Bean
public DataSource dataSource() {
PoolProperties poolProperties = new PoolProperties();
poolProperties.setUrl(this.properties.getDatabase().getUrl());
poolProperties.setUsername(this.properties.getDatabase().getUsername());
poolProperties.setPassword(this.properties.getDatabase().getPassword());
//here it is
poolProperties.setTestOnBorrow(true);
poolProperties.setValidationQuery("SELECT 1");
return new DataSource(poolProperties);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101842 次 |
| 最近记录: |