恢复Hibernate连接
有没有人知道重新建立/重试hibernate连接的方法。 我的意思是例如:远程数据库已关闭,我启动了我的应用程序。 Hibernate无法建立连接。 它失败。 但申请没有结束。 有没有办法说hibernate再试一次建立一个连接?
提前致谢
您应该真正选择C3P0连接池: http : //www.mchange.com/projects/c3p0/index.html#hibernate-specific
有关该主题的C3P0文档中有一节: http : //www.mchange.com/projects/c3p0/index.html#configuring_recovery
首先你必须正确配置c3p0,在使用hibernate的情况下必须在c3p0.properties文件中进行。
在c3p0.properties中,当数据库关闭时,将这些属性重试为每3秒无限重新连接:
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,则将在每次连接检出时执行操作以validation连接是否有效。 更好的选择:使用idleConnectionTestPeriod定期validation连接。
可以在hibernate.properties和c3p0.properties中配置其他几个属性。
可能是,你尝试调用方法.getCurrentSession()而不是.openSession() ?
如果连接下降,您必须建立新的连接。
我希望这有帮助。