私は、Spring Data JPAとSpring BatchでSpring Boot 1.5.7を使用しています。エンティティを読み取るのにJpaPagingItemReader<T>
、エンティティを書き込むのにJpaItemWriter<T>
を使用します。私がしようとしているのは、特定のデータベーステーブルからデータを読み取り、別のフォーマットに変換して別のテーブルに書き戻すことです(未処理のjson文字列をデシリアライズして特定のテーブルに挿入します)。状態変更によるバッチクエリの問い合わせ
処理した後に読み込んだデータを削除するつもりはなく、代わりに処理済としてマークしたいだけです。
@Bean
public ItemReader<RdJsonStore> reader(){
JpaPagingItemReader<RdJsonStore> reader = new JpaPagingItemReader<>();
reader.setEntityManagerFactory(entityManagerFactory);
reader.setQueryString("select e from RdJsonStore e "+
"where e.jsonStoreProcessedPointer is null");
reader.setPageSize(rawDataProperties.getBatchProcessingSize());
return reader;
}
それへのポインタが存在しないのであれば、それは読み取り専用になります。私はこのような何かに問い合わせを行った場合の質問は、なりJpaPagingItemReader
ハンドルは、うまく読み取ります。私はエントリを処理した後にポインタを挿入します(バッチでは、1000エントリを処理し、すべてのIDをポインタテーブルにポストするようにします)。
このような実行時に返されたデータにItemWriter(およびJPA one)が変更した場合、ItemWriter(およびJPA one)は処理できますか?
ポインタ解決策が適用されない場合、DB-DBバッチジョブをどのように設計する必要がありますか?
私のソース・テーブルは次のようになります。
いいえ、元のデータは変更されず、各ページについてクエリが再実行されるため、データが欠落します。 –
@ M.Deinumそれは私が思ったことです:( – appl3r