レコードの「ステータス」列を変更した後に開始されるシングルスレッドの Quartz ジョブがあります。ジョブには、検索するレコードのプライマリ ID が渡されます。奇妙な理由で、クォーツ ジョブは元のステータス値を参照します。
ジョブには、毎秒最大 1 分までルックアップを再試行するロジックがあります。最初は、休止状態が古いオブジェクトを返す可能性があると思ったので、 a を追加しましたsession.clear()
が、違いはありませんでした。次に、休止状態をバイパスしてデータを取り込むために a を追加しましたjdbcTemplate.queryForMap
が、それも古いデータを参照しています。
Quartz ジョブが古い値をログに記録している間、ショー ビューとデータベースに対して手動で呼び出した SQL クエリに新しい値が表示されます。version プロパティを確認したところ、変更されていることがわかりましたが、Quartz ジョブには古い値が含まれています。
Quartz ジョブが変更を認識しない理由はありますか?
奇妙なことに、このロジックは一部のサーバーで完全に正常に機能し、他のサーバーでは一貫して失敗し、他のサーバーでは定期的に失敗します。
環境は次のもので構成されます。
- グレイルズ 1.3.7
- MySQL
- Linux
- トムキャット