首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Hibernate与数据库的连接在几分钟后超时

Java Hibernate与数据库的连接在几分钟后超时
EN

Stack Overflow用户
提问于 2018-10-19 05:41:32
回答 1查看 737关注 0票数 0

Hibernate在几分钟后失去与数据库的连接,并发送以下错误:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper

logExceptions警告:

SQL错误: 0,SQLState: 08S01 paź18,2018 11:17:40 PM

org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions错误:

从服务器成功接收的最后一个数据包是在363到452毫秒之前。最后一个成功发送到服务器的数据包是在363到493毫秒之前。长于服务器配置的'interactive_timeout‘值。在应用程序中使用之前,应考虑使连接过期和/或测试连接有效性,增加客户端超时的服务器配置值,或使用连接器/J连接属性'autoReconnect=true‘来避免此问题。

我添加了autoreconnect=true,但它不工作,错误仍然发生。

然后我创建了DatabaseConnectionController,它具有以下功能:

代码语言:javascript
复制
public static EntityManagerFactory getEntityManagerFactory() {

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

问题仍然存在,我开始在谷歌中搜索答案,我在persistance.xml中添加了以下几行:

代码语言:javascript
复制
<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不会在第一次发送错误消息时自动重新连接到数据库,但是当发送错误消息时,第二次查询会自动重新连接到数据库。

如何将其设置为在断开连接后自动重新连接,或者如何捕获此错误并在代码中重复查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 08:25:16

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

代码语言:javascript
复制
<!-- 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中。

代码语言:javascript
复制
<!-- 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>

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52883010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档