【发布时间】:2018-10-18 21:41:31
【问题描述】:
Hibernate 在几分钟后失去与数据库的连接并发送这样的错误:
org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 警告:
SQL 错误:0,SQLState:08S01 paź 18, 2018 晚上 11:17:40
org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 错误:
从服务器成功收到的最后一个数据包是 363 452 毫秒前。最后一个成功发送到服务器的数据包是 363 493 毫秒前。比服务器配置的值长 'interactive_timeout'。您应该考虑到期和/或 在您的应用程序中使用之前测试连接有效性,增加 服务器为客户端超时配置值,或使用 连接器/J 连接属性 'autoReconnect=true' 以避免这种情况 问题。
我添加了 autoreconnect=true 但它不起作用,错误仍然发生。
然后我创建了具有以下功能的 DatabaseConnectionController:
public static EntityManagerFactory getEntityManagerFactory() {
if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
return entityManagerFactory;
} else {
return requestNewConnection();
}
}
问题依旧,我开始在google中搜索答案,我在persistance.xml中添加了几行:
<property name="hibernate.dbcp.validationQuery" value="SELECT 1" />
<property name="hibernate.dbcp.testOnBorrow" value="true" />
<property name="hibernate.dbcp.validationInterval" value="60000" />
<property name="hibernate.dbcp.testOnReturn" value="true" />
它也没有解决我的问题。
Hibernate 在第一次发送错误消息时不会自动重新连接到数据库,但是在发送第二次查询时会自动重新连接到数据库。
如何将其设置为断开后自动重新连接,或者如何捕获此错误并在代码中重复查询?
【问题讨论】:
标签: java mysql hibernate connection