首页  >  文章  >  数据库  >  为什么我收到'MySQLNonTransientConnectionException:连接关闭后不允许执行任何操作”以及如何修复它?

为什么我收到'MySQLNonTransientConnectionException:连接关闭后不允许执行任何操作”以及如何修复它?

Susan Sarandon
Susan Sarandon原创
2024-10-30 04:59:021021浏览

Why Am I Getting

数据库超时和连接池过载

此 Hibernate 问题,“com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:不允许进行操作连接关闭后,当持久连接由于不活动而隐式关闭时,就会出现这种情况。

原因:

连接已建立,但在较长时间内保持不活动状态,超过服务器的“wait_timeout”或客户端超时设置,例如“connectionTimeout”。

解决方案:

1。调整服务器和客户端超时:

  • 在服务器端,增加 MySQL 配置中的“wait_timeout”参数。
  • 在客户端,指定“connectionTimeout”和连接配置中的“readTimeout”属性。

2.配置连接池:

  • 使用 C3P0 等第三方连接池,而不是 Hibernate 的内置池。
  • 配置适当的池参数,例如“maxPoolSize”、“ minPoolSize、" "idleTimeout" 和 "maxIdleTime"。

使用 C3P0 的 hibernate.cfg.xml 配置示例:

<code class="xml"><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.min_size">5</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.idleTestPeriod">3600</property>
<property name="c3p0.maxIdleTime">3600</property></code>

其他提示:

  • 检查可能阻止或超时连接的任何防火墙或代理服务器。
  • 考虑使用支持 JDBC 连接池的 JDBC 驱动程序,例如 MySQL Connector/ J.
  • 监控连接使用模式并相应调整池大小。

以上是为什么我收到'MySQLNonTransientConnectionException:连接关闭后不允许执行任何操作”以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn