java hibernate到数据库的连接在几分钟后超时

oyxsuwqo  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(371)

hibernate在几分钟后失去与数据库的连接,并发送以下错误:
org.hibernate.engine.jdbc.spi.sqlexceptionhelper日志异常警告:
sql错误:0,sqlstate:08s01 paź 2018年11月18日晚上11:17:40
org.hibernate.engine.jdbc.spi.sqlexceptionhelper logexceptions错误:
从服务器成功接收的最后一个数据包是363 452毫秒前。最后一个成功发送到服务器的数据包是363 493毫秒前。长于服务器配置的值“interactive\u timeout”。您应该考虑在应用程序中使用之前终止和/或测试连接有效性,增加服务器为客户端超时配置的值,或者使用连接器/j连接属性“autoreconnect=true”来避免此问题。
我添加了autoreconnect=true,但它没有工作,错误仍然发生。
然后我创建了databaseconnectioncontroller,它具有以下功能:

public static EntityManagerFactory getEntityManagerFactory() {

    if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
        return entityManagerFactory;
    } else {
        return requestNewConnection();
    }
}

问题仍然存在,我开始在google中搜索答案,我在persistence.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在第一次发送错误消息时不会自动重新连接到数据库,但是在发送第二个查询时会自动重新连接到数据库。
如何将其设置为断开连接后自动重新连接,或者如何捕获此错误并在代码中重复查询?

mrwjdhj3

mrwjdhj31#

问题是数据库将丢弃空闲连接。连接可以空闲多长时间取决于数据库的配置。为了解决这个问题,您需要使用一个连接池,比如c3p0。要使用它,您需要在maven中添加以下依赖项。

<!-- c3p0 -->
<!-- Session manager -->
<!-- Check that the version works for you -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.2.12.Final</version>
</dependency>

然后需要将以下配置添加到hibernate.cfg.xml中。

<!-- c3p0 -->
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.timeout">600</property>
<property name="hibernate.c3p0.max_size">25</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_statement">0</property>
<property name="hibernate.c3p0.acquireRetryAttempts">1</property>
<property name="hibernate.c3p0.acquireRetryDelay">250</property>

这应该足以持续创建新连接并解决连接问题。

相关问题