为了账号安全,请及时绑定邮箱和手机立即绑定

在spring-boot jpa hibernate中,在> 4 <24之后连接到Db

在spring-boot jpa hibernate中,在> 4 <24之后连接到Db

繁花不似锦 2019-08-17 16:05:09
在spring-boot jpa hibernate中,在> 4 <24之后连接到Db我有一个使用spring-boot,jpa-hiberanate与mysql的应用程序。我收到此错误日志Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 56,006,037 milliseconds ago.  The last packet sent successfully to the server was 56,006,037 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.这是我的application.properties# DataSource settings: set here configurations for the database connectionspring.datasource.url = jdbc:mysql://localhost:3306/testspring.datasource.username = test spring.datasource.password = test spring.datasource.driverClassName = com.mysql.jdbc.Driver# Specify the DBMSspring.jpa.database = MYSQL# Show or not log for each sql queryspring.jpa.show-sql = true# Hibernate settings are prefixed with spring.jpa.hibernate.*spring.jpa.hibernate.ddl-auto = update spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialectspring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy要解决这个问题,我可以使用spring.datasource.testOnBorrow=truespring.datasource.validationQuery=SELECT 1但我检查了它不推荐。所以任何人都可以建议我应该怎么做才能克服这个错误
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

最简单的方法是autoReconnect在JDBC URL中指定属性,尽管这不是推荐的方法。

spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true

当您有活动连接时,这会产生问题,并且在事务发生时会发生某些事情,并且会发生重新连接。在事务开始时验证连接并在开始时获取新连接时,它不会产生问题。

但是,最好在应用程序的生命周期内启用连接验证。为此,您可以指定多个属性

首先,指定允许池的最大连接数。(有关确定max poolsize的读取,请阅读此内容)。

spring.datasource.max-active=10

您还可能需要指定初始连接数

spring.datasource.initial-size=5

接下来,您要指定空闲连接的最小和最大数量。

spring.datasource.max-idle=5spring.datasource.min-idle=1

要验证连接,您需要指定验证查询以及何时验证。您想要定期验证,而不是从池中检索连接(这是为了防止池中的连接断开)。

spring.datasource.test-while-idle=truespring.datasource.test-on-borrow=truespring.datasource.validation-query=SELECT 1

现在您还在连接空闲时进行验证,您需要指定为连接运行此查询的频率以及何时将连接视为空闲。

spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)

这一切都应该触发您的(空闲)连接的验证,并且当发生异常或空闲时段已经过去时,您的连接将从池中删除。

假设您使用Tomcat JDBC作为连接池,是一个很好的读取配置的内容和方法。


查看完整回答
反对 回复 2019-08-17
  • 1 回答
  • 0 关注
  • 464 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信