PostgreSQL をデータベースとして使用する Web アプリケーションがあります。
Hibernate を使用してデータを保存しようとしているようなシナリオを想定します。データベースサーバーがダウンした場合、データを保存する直前に何が起こったのでしょうか?
Hibernate は保存を再試行するか、再試行コードを記述する必要がありますか。
どんな助けでも大歓迎です。
PostgreSQL をデータベースとして使用する Web アプリケーションがあります。
Hibernate を使用してデータを保存しようとしているようなシナリオを想定します。データベースサーバーがダウンした場合、データを保存する直前に何が起こったのでしょうか?
Hibernate は保存を再試行するか、再試行コードを記述する必要がありますか。
どんな助けでも大歓迎です。
いいえ、Hibernate はデータの保存を再試行しません。データベースの障害により、トランザクションが失敗し、すべての変更がロールバックされます。
さらに悪いことに、接続プールを正しく構成しないと、データベースが再び実行されたときに接続を再確立できなくなります。詳細については、この質問をご覧ください。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>