からの強制読みます。 を別々のVM(別々のアプリケーション、個別の展開)で実行し、同じ基礎となるDBテーブルインスタンスで操作している異なるバッチプロセスがあります。JPAリポジトリ春ブーツ:私たちは春JPARepositoryを使用しているDBの代わりに、キャッシュ
バッチ1:
ステップ1:DB.Table1に挿入します。
ステップ2:時間のかかる複雑なビジネスタスク。
手順3:DB.Table1の同じ行を更新します。
バッチ2:DB.Table1の同じ行を更新します。
DB行がDBから読み出され、それに応じて行動するバッチ1、バッチ1つのニーズの開始/終了の間でバッチ2のプロセスによって更新されます。しかし、それはキャッシュから読み込み中です。 Entity findById(Long id)
エンティティ@Cacheable(false)
に印を付けることは、このエンティティ全体のすべての操作に影響します。これはパフォーマンスが低下し、やりたくありません。具体的な操作レベルで同じことを達成するための他の方法になります何
?
EDIT - この場合、Native SQLクエリを使用してTable1.Col1のLATESTデータを強制的に読み込む以外の方法はありますか?以下は動作しませんでした。
1.バッチ1の間にrepository.saveAndFlush()
を使用してください。ステップ1 repository.findById(id)
2. entityManager.refresh(entity)
が動作しませんでした。
3.各プロセスは異なるコンテキスト、バッチ2.Step 1にLockModeType.PESSIMISTIC_FORCE_INCREMENT
を使用すると、私はネイティブの読み取りが正常に機能している日付までの唯一の解決策であることが判明し
バッチ1またはバッチ2はトランザクション処理ですか?つまり、バッチ1のテーブル1の更新がコミットされていないため、バッチ2が実行しようとしているものとは無関係ですか? – alexanderific