有人知道重新建立/重试Hibernate连接的方法吗?比如说:远程数据库宕机,我启动我的应用程序。Hibernate无法建立连接,失败了。但是应用程序没有关闭。有没有办法让Hibernate再尝试一次建立连接呢?
提前感谢。
c3p0.acquireRetryAttempts = 0
c3p0.acquireRetryDelay = 3000
c3p0.breakAfterAcquireFailure = false
此外,为避免长时间存在于连接池中的失效连接,使用连接年龄管理:
c3p0.maxConnectionAge = 6000
c3p0.maxIdleTime = 6000
c3p0.maxIdleTimeExcessConnections = 1800
c3p0.idleConnectionTestPeriod = 3600
这些可能相当昂贵,但如果以上方法不足以解决问题,它们会很有帮助:
c3p0.testConnectionOnCheckout = true
c3p0.preferredTestQuery = SELECT 1;
您可能还需要检查连接泄漏是否会阻止恢复:
c3p0.debugUnreturnedConnectionStackTraces = true
最后,请确保C3P0和Hibernate正确连接,为“com.mchange”包启用调试日志,并查看C3P0是否会告诉您有关自身的任何信息。 它应该声明加载的配置属性,因此请检查是否全部存在。
希望这可以帮到你。
C3P0是Hibernate的内部连接池实现。
在Hibernate属性文件中添加“hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider”。创建一个名为c3p0.properties的文件,并相应地设置参数。此文件和c3p0-x.jar必须在类路径中。
c3p0.properties
c3p0.idleConnectionTestPeriod :如果这是一个大于0的数字,c3p0将每隔这么多秒测试所有空闲的、池化但未签出的连接。
c3p0.testConnectionOnCheckout :仅在必要时使用。昂贵。如果为true,则会在每次连接签出时执行操作以验证连接是否有效。更好的选择:使用idleConnectionTestPeriod定期验证连接。
还有其他几个属性可以在hibernate.properties和c3p0.properties中配置。
可能是你尝试调用方法.openSession()而不是.getCurrentSession()?
如果连接断开,你必须建立新的连接。
希望这可以帮到你。