gpt4 book ai didi

mysql - Hibernate JDBCExceptionReporter -> 连接有效性、超时、自动重连

转载 作者:行者123 更新时间:2023-11-29 02:36:07 25 4
gpt4 key购买 nike

我在使用 MySQL 和 MySQL Connector/J(MySQL 的官方 JDBC 驱动程序)的 Java EE 应用程序中遇到 Hibernate(3.6.0.-Final)问题。

在我的 hibernate.cfg.xml 中,我有这些代码行:

<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/mydbtest</property>
<property name="connection.username">root</property>
<property name="connection.password">mypassword</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">20</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management, in this case
the session will be close after each transaction! -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- auto create tables -->
<property name="hbm2ddl.auto">none</property>
...
</session-factory>
</hibernate-configuration>

我将 connection.pool_size 属性的值从 1 更改为 20。我这样做是因为有人告诉我(我遇到了这些问题),数据未加载并且出现错误被抛出连接池大小。还有,

所以我将值更改为 20。但现在出现此错误:

Hibernate: select ...
WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 08S01
ERROR: org.hibernate.util.JDBCExceptionReporter -
The last packet successfully received from the server was 61.428.729
milliseconds ago. The last packet sent successfully to the server was
61.428. 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.

那么我应该如何处理这些可能的解决方案呢?解决这些 JDBC 连接问题的最佳方法是什么?我阅读了有关 c3p0 的内容,但我是连接池的新手。我不明白这个问题:我有一个 20 的连接池。那么为什么它会失败?为什么抛出异常而不打开新异常?

非常感谢您,并致以最诚挚的问候。

-- 更新 --

<property name=“hibernate.c3p0.acquire_increment”>3</property>
<property name=“hibernate.c3p0.idle_test_period”>14400</property>
<property name=“hibernate.c3p0.timeout”>25200</property>
<property name=“hibernate.c3p0.max_size”>15</property>
<property name=“hibernate.c3p0.min_size”>3</property>
<property name=“hibernate.c3p0.max_statements”>0</property>
<property name=“hibernate.c3p0.preferredTestQuery”>select 1;</property>

-- 更新 2 --

/etc/my.cnf 文件:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

最佳答案

这通常发生在一段时间不活动之后,MySQL 关闭了服务器端的连接。但是客户端(您的应用程序)中的连接仍然可用,因此它最终变得陈旧。

通过使用连接池机制,它负责在需要时打开/关闭连接,避免了此类问题。如错误消息所述,一种解决方案是在 URL 中使用 JDBC 选项 autoReconnect=true。另一种是配置您的连接池机制以在交付给您的应用程序之前打开/测试连接。

关于mysql - Hibernate JDBCExceptionReporter -> 连接有效性、超时、自动重连,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com