偶尔出现 JDBC begin transaction failed,然后自动恢复

Occasionally getting JDBC begin transaction failed, then recovers automatically

我们正在使用多个 spring 数据源来连接多个数据库。我们偶尔会收到以下错误,然后过一会儿一切都会自动重新开始工作

o.h.e.j.s.SqlExceptionHelper.logExceptions:129 - SQL Error: 0, SQLState: null
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.TransactionException: JDBC begin transaction failed:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,250,518 milliseconds ago.  The last packet sent successfully to the server was 84,250,518 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.

发现问题,由于一些不活动的数据源变得空闲并失去与池的连接。

解决方案是添加验证查询并在 spring 应用程序属性文件

上设置 testOnBorrow true
validationQuery="select 1"
testOnBorrow=true

autoRecconect = true 在这种情况下没有帮助