如何使用Hibernate保存数据时处理数据库服务器故障?

问题描述:

我有一个使用PostgreSQL作为数据库的Web应用程序。如何使用Hibernate保存数据时处理数据库服务器故障?

假设像我想使用Hibernate保存()数据的情况。现在就在数据库服务器关闭的情况下保存数据之前,发生了什么?

Hibernate会重新尝试保存,或者我必须编写重试代码。

任何帮助将不胜感激。

不,Hibernate不会重新保存你的数据。数据库故障将导致您的事务失败,并且所有更改都将被回滚。
更糟糕的是,如果您没有正确配置连接池,那么当数据库将再次运行时,将无法重新建立连接。看看this question了解更多信息。我复制并粘贴c3p0配置。

<c3p0-config> 
<default-config> 
<!-- Configuring Connection  Testing --> 
<!-- property name="automaticTestTable">TEST_EMS_HIBERNATE_CONN</property --> 
<property name="checkoutTimeout">0</property> 
<property name="testConnectionOnCheckout">true</property> 
<property name="testConnectionOnCheckin">false</property> 
<property name="preferredTestQuery">SELECT 1 from dual</property> 
<!-- Configuring Recovery From Database Outages --> 
<property name="acquireRetryAttempts">0</property> 
<property name="acquireRetryDelay">1000</property> 
<property name="breakAfterAcquireFailure">false</property> 
<!-- Configuring to  Debug and Workaround Broken  Client Apps  --> 
<property name="unreturnedConnectionTimeout">1800</property> 
<property name="debugUnreturnedConnectionStackTraces">true</property> 
</default-config> 
+0

谢谢。我已经使用c3p0属性,但不是你提到的所有属性。我会按照你的建议去尝试所有的东西。 –

+0

@ManojKathiriya,不客气。请,如果这是您的解决方案,upvote /接受它(也许upvote我提供的链接的第一个答案) – ThanksForAllTheFish

+0

因为我现在配置根据你给出的建议,而不是面临任何问题。 –