恢复Hibernate连接

时间:2011-01-18 16:36:01

标签: java hibernate

有没有人知道重新建立/重试hibernate连接的方法。我的意思是例如:远程数据库已关闭,我启动了我的应用程序。 Hibernate无法建立连接。它失败。但申请没有结束。有没有办法说hibernate再试一次建立一个连接?

提前致谢

3 个答案:

答案 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()

如果连接失败,您必须建立新的连接。

我希望这会有所帮助。