Spring batch 如何在spring批处理中编写多个类
情况: 我从数据库中读取internet上文件的url。在itemProcessor中,我下载了这个文件,并希望将每一行保存到数据库中。然后继续处理,我想创建一些新的类“summary”,我也想保存到db。如何在spring批处理中配置我的作业?您可以使用Spring batch 如何在spring批处理中编写多个类,spring-batch,Spring Batch,情况: 我从数据库中读取internet上文件的url。在itemProcessor中,我下载了这个文件,并希望将每一行保存到数据库中。然后继续处理,我想创建一些新的类“summary”,我也想保存到db。如何在spring批处理中配置我的作业?您可以使用 但是,您的摘要处理可能应该在另一个步骤中,该步骤读取您先前为用例作业插入的行,可以使用此步骤序列定义这些行(这样,该作业也可以重新启动): 使用以下方法将文件从URL下载到硬盘:Tasklet是处理单个步骤的策略;在您的情况下,类似于post
但是,您的摘要处理可能应该在另一个步骤中,该步骤读取您先前为用例作业插入的行,可以使用此步骤序列定义这些行(这样,该作业也可以重新启动):
JobExecutionContext
2.1. 使用
FlatFileItemReader
(或您自己的ItemReader/ItemStream实现)读取下载的文件2.2使用
ItemProcessor
处理每一行2.3使用自定义
MyWriter
将2.2中要处理的每个对象写入数据库,该自定义MyWriter
进行汇总计算,并委托给ItemWriter
以实现T的数据库持久化,委托给ItemWriter
以写入summary
对象
bean是否包含每个文件行和
是您写入数据库的bean吗
MyWriter
可以这样使用:
class MyWriter extends ItemWriter<T> {
private ItemWriter<Summary> summaryWriter;
private ItemWriter<T> tWriter;
public void write(List<? super T> items) {
List<Summary> summaries = new ArrayList<>(items.size());
for(T item : items) {
final Summary summary = /* Here create summary object reading from
* database or creating new object */
/* Do summary or update summary */
summaries.add(summary);
}
/* The code above is trivial: you can group Summary object using a Map<SummaryKey,Summary> to reduce reading and use summaryWriter.write(summariesMap.values()) for example */
tWriter.write(items);
summaryWriter.write(summaries);
}
}
MyWriter类扩展了ItemWriter{
私人项目撰写人总结撰写人;
私人项目作者;
公开无效写入(列表是的,我正在考虑下一步,但我认为这是无效的。一旦我有了这些行,为什么我要在下一步中再次读取它。或者是否有一些方法可以共享这些数据?如果这是大量数据,你应该将其写入数据库,然后写入数据。如果这是可以放入内存的少量数据,您可以使用Job ExecutionContext在所有步骤中轻松使用它。这是第一个选项