诊断“com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 连接关闭后不允许操作”错误
使用 Hibernate 时使用远程连接时,由于连接断开,您可能会遇到“连接关闭后不允许执行任何操作”错误。默认情况下,MySQL 有一个 wait_timeout 设置,可以导致连接在一段时间不活动后关闭。在长时间的应用程序运行期间或网络不稳定时,可能会发生这种情况。
使用 C3P0 进行连接池
要解决此问题,建议使用连接池库,例如C3P0。 Hibernate 的本机连接池是有限的,不适合生产环境。连接池建立了一个由应用程序管理和重用的连接池,减少了为每个查询建立新连接的开销。
使用 Hibernate 配置 C3P0
这里使用 C3P0 的更新配置文件:
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property> <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="c3p0.acquire_increment">1</property> <property name="c3p0.idle_test_period">100</property> <!-- seconds --> <property name="c3p0.max_size">100</property> <property name="c3p0.max_statements">0</property> <property name="c3p0.min_size">10</property> <property name="c3p0.timeout">3600</property> <!-- seconds -->
在此配置中,使用池大小、超时和连接测试的适当设置启用 C3P0 连接提供程序。
其他潜在原因
如果连接池无法解决问题,则值得调查其他潜在原因,例如:
以上是如何修复 Hibernate 中的'com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许操作”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!