恢复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()

如果连接下降,您必须建立新的连接。

我希望这有帮助。