Spring IntegrationとSpring Batchを使用するSpring Bootアプリケーションがあります。ポーラーにファイルをドロップして処理します。このプロセスは、レコードをデータベースに挿入し、その後それらを読み取っていくつかの処理を行い、ファイルを書き込みます。 10個のレコードがあるとしましょう。私たちは初めて10のレコードを読み、10を書きました。サーバーを停止することなく、データベース上のSQLクライアントを介してすべてのレコードを削除し、同じファイルを再度実行すると、20レコードで10レコードが書き込まれます。 JPAやデータソースのキャッシュがあると思います。私たちは、JPAとキャッシュのいくつかの自動構成オプションを無効にしてみましたが、キャッシングを無効にするための適切な構成オプションが見つかりませんでした。SpringBootでSpringBatchのJPAを無効にする方法
少し詳細を質問に追加してください。
基本的にFileHandlerを持つcronスケジューラがあります。これは以下のhandleFileメソッドです。
public File handleFile(File file) throws Throwable {
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
Job job = (Job) appContext.getBean("processInitialFileJob");
JobExecution jb = jobLauncher.run(job, jobParametersBuilder.toJobParameters());
....
}
上記のコードでは、新しいJPAセッションがあるかどうか、またはJPAセッションをまったく使用しないようにするために、どうすればよいですか?このジョブは、データベースのキャッシュされた表現ではなく、毎回データベースから読み取る必要があります。
私は問題点があります。これを完全に無効にする方法はありますか?だから、基本的に私がテーブルを読んだら、テーブルのキャッシュされた表現ではなくテーブルを実際に読みたいと思っています。 –