リレーショナル データベース (現在は H2) を更新する Java アプリを作成しています。私は次のことを行うプロセスを持っています:
- 特定のデータ項目について外部システムにクエリを実行する
- インポート ログ テーブルを確認して、これらのアイテムが既にシステムにインポートされているかどうかを確認します。そうでない場合:
- 新しいデータ項目をさまざまなテーブルにインポートします。
- インポート ログ テーブルに新しいレコードを書き込みます。
このプロセスは、異なるスレッドで同時に実行される場合があります。2 つのスレッドが両方ともインポート ログをチェックし、そこに何も見つからず、両方ともデータ項目を挿入しようとする問題を回避したいと思います。
良いアプローチは何ですか?私は検討してきました:
- SERIALIZABLE トランザクション分離の使用。
- インポート ログの一意のインデックス制約に依存して、トランザクションの 1 つをエラーおよびロールバックします。
- プロセスを Java アプリの 1 つのスレッドに限定します。
さまざまな理由から、上記のどれもあまり魅力的ではないようです。よりうまく機能する可能性のある別のアプローチはありますか?