我使用Spring Boot 1.5.7和Spring Data JPA和Spring Batch。我使用JpaPagingItemReader<T>
来读取实体,并使用JpaItemWriter<T>
来写入它们。我想要做的是从某个数据库表中读取数据,将它们转换为不同的格式并将它们写回不同的表格(我读取原始json字符串,将它们反序列化并将它们插入到它们的特定表格中)。Spring批量查询状态变化
我不打算删除处理它们后读取的数据,而只是想将它们标记为已处理。现在的问题是,将JpaPagingItemReader
手柄读起来很好,如果我作出这样的查询到的东西:
@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;
}
所以,如果没有指针,它会只读。我会在处理一个条目之后插入一个指针(批量处理,如我处理1000条目并将其所有ID发布到指针表)。
如果我更改为像这样运行时返回的数据(它尝试查询的条目每批减少),ItemWriter(和JPA one)是否可以处理读取的数据?
如果指针解决方案不适用,我应该如何设计DB-to-DB批处理作业?
我的源表看起来像这样:
不,它不能,基础数据发生变化,并且对于每个页面查询重新执行,您将开始丢失数据。 –
@ M.Deinum这是我想到的:( – appl3r