一尘不染

在Spring-boot JPA休眠中> 4 <24之后连接到Db的管芯

mysql

我有一个使用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 connection
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = test
spring.datasource.password = test
spring.datasource.driverClassName = com.mysql.jdbc.Driver

# Specify the DBMS
spring.jpa.database = MYSQL

# Show or not log for each sql query
spring.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.MySQL5Dialect
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy

为了解决这个问题,我可以使用

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

但是我检查了不建议这样做。因此有人可以建议我该怎么做才能克服此错误


阅读 316

收藏
2020-05-17

共1个答案

一尘不染

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

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

当您有活动的连接并且在事务期间发生某些事情并且将要进行重新连接时,这可能会产生问题。在事务开始时验证连接并在开始时获取新的连接时,它不会出现问题。

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

首先从指定允许该池的最大连接数开始。(有关确定最大池大小的信息,请阅读this)。

spring.datasource.max-active=10

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

spring.datasource.initial-size=5

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

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

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

spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.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连接池是一个很好的读什么,以及如何配置的。

2020-05-17