Spring batch 如何在spring批处理中编写多个类

Spring batch 如何在spring批处理中编写多个类,spring-batch,Spring Batch,情况: 我从数据库中读取internet上文件的url。在itemProcessor中,我下载了这个文件,并希望将每一行保存到数据库中。然后继续处理,我想创建一些新的类“summary”,我也想保存到db。如何在spring批处理中配置我的作业?您可以使用 但是,您的摘要处理可能应该在另一个步骤中,该步骤读取您先前为用例作业插入的行,可以使用此步骤序列定义这些行(这样,该作业也可以重新启动): 使用以下方法将文件从URL下载到硬盘:Tasklet是处理单个步骤的策略;在您的情况下,类似于post

情况:

我从数据库中读取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在所有步骤中轻松使用它。这是第一个选项