恢复Hibernate连接

And*_*rey 6 java hibernate

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

提前致谢

Spa*_*jus 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
Run Code Online (Sandbox Code Playgroud)

此外,为了避免无限期地在池中断开连接,请使用连接时限管理:

c3p0.maxConnectionAge = 6000
c3p0.maxIdleTime = 6000
c3p0.maxIdleTimeExcessConnections = 1800
c3p0.idleConnectionTestPeriod = 3600
Run Code Online (Sandbox Code Playgroud)

这些可能非常昂贵,但如果上述还不够有用:

c3p0.testConnectionOnCheckout = true
c3p0.preferredTestQuery = SELECT 1;
Run Code Online (Sandbox Code Playgroud)

您可能还想检查阻止恢复的连接泄漏:

c3p0.debugUnreturnedConnectionStackTraces = true
Run Code Online (Sandbox Code Playgroud)

最后,确保C3P0正确地与hibernate挂钩,为"com.mchange"包启用调试日志记录,并查看C3P0是否告诉您有关自身的任何信息.它应该声明已加载的配置属性,因此请查看它是否全部存在.

我希望这有帮助.


Nay*_*kar 1

C3P0 是 hibernate 的内部连接池实现。

在 hibernate 属性文件中添加“hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider”。创建文件 c3p0.properties 并相应地设置参数。此文件和 c3p0-x.jar 必须位于类路径中。

c3p0.属性

  • c3p0.idleConnectionTestPeriod:如果这是一个大于 0 的数字,则 c3p0 将每隔此秒数测试所有空闲、池化但未签出的连接。

  • c3p0.testConnectionOnCheckout:仅在必要时使用。昂贵的。如果为 true,则将在每次连接检查时执行操作以验证连接是否有效。更好的选择:使用idleConnectionTestPeriod定期验证连接。

还有其他几个属性可以在 hibernate.properties 和 c3p0.properties 中配置。