有没有人知道重新建立/重试hibernate连接的方法。我的意思是例如:远程数据库已关闭,我启动了我的应用程序。 Hibernate无法建立连接。它失败。但申请没有结束。有没有办法说hibernate再试一次建立一个连接?
提前致谢
答案 0 :(得分:18)
你应该真正选择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是否告诉您有关自身的任何信息。它应该声明已加载的配置属性,因此请查看它是否全部存在。
我希望这会有所帮助。
答案 1 :(得分:1)
C3P0是hibernate的内部连接池实现。
添加“hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider” 在hibernate属性文件中。创建一个文件c3p0.properties相应地设置参数。这个档案& c3p0-x.jar必须在类路径中。
<强> c3p0.properties 强>
c3p0.idleConnectionTestPeriod :如果这是一个大于0的数字,c3p0将每隔这几秒测试所有空闲,池化但未经检查的连接。
< / LI>c3p0.testConnectionOnCheckout :仅在必要时使用。昂贵。如果为true,则将在每次连接检出时执行操作以验证连接是否有效。更好的选择:使用idleConnectionTestPeriod定期验证连接。
可以在hibernate.properties&amp;中配置其他几个属性。 c3p0.properties。
答案 2 :(得分:0)
可能是,您尝试将方法 .getCurrentSession()改为 .openSession()?
如果连接失败,您必须建立新的连接。
我希望这会有所帮助。