当前位置: 首页 > 知识库问答 >
问题:

Spring批处理-在读卡器和处理器之间传递值

邹慈
2023-03-14

我有一个要求,我需要从xls(其中存在一个名为netCreditAmount的列)中读取值并将值保存在数据库中。要求是从所有行中添加netCreditAmount的值,然后在数据库中仅为xls中的第一行设置此总和,其余行插入相应的netCreditAmounts。我应该如何在Spring Batch中进行实施。普通的阅读器、处理器和写入器工作正常,但我应该在哪里插入这个实现?谢谢!

共有2个答案

锺威
2023-03-14

那么问题是什么呢?您需要设置批处理作业步骤以使用读取器-处理器-写入器。

阅读器有界面:

public interface ItemReader<T> {    
  T read();
}

处理器:

public interface ItemProcessor<I, O> {
  O process(I item);
}

所以你需要由阅读器提供相同的类型-T;并将其传递给处理器-I

stepBuilderFactory.get("myCoolStep")
            .<I, O>chunk(1)
            .reader(myReader)
            .processor(myProcessor)
            .writer(myWriter)
            .build();
史经业
2023-03-14

哟可以通过添加额外的任务来解决这个问题。工作流程可以如下所示

@Bean
    public Job myJob(JobBuilderFactory jobs) throws Exception {
        return jobs.get("myJob")
                .start(step1LoadAllData())  // This step will load all data in database excpet first row in xls
                .next(updateNetCreditAmountStep()) //// This step will be a tasklet. and will update total sum in first row. You can use database sql for sum for this 
                .build();           

    }

Tasklet如下所示

@Component
public class updateNetCreditAmountTasklet implements Tasklet {  

    @Override
    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext)
            throws Exception {
            Double sum = jdbctemplate.queryForObject("select sum(netCreditAmount) from XYZ", Double.class);
         // nouw update this some in database for first row 
        return null;
    }

}
 类似资料:
  • 我有一个包含Reader->Processor->Writer的spring批处理。 B/W传递的数据类型为: 在中从CSV文件读取一个简单的批处理数据时,中的一些处理&输出CSV文件由编写。 请建议。如果你认为任何其他方法会更好,请建议。 谢谢

  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

  • 我必须使用Spring Batch配置一个作业。是否可以有一个单线程的项目阅读器,但多线程处理器? 在这种情况下,ItemReader将通过从数据库中读取工作项(通过执行预定义的查询)来创建要处理的工作项,每个处理器将并行处理项/块。

  • (A)ItemReader[第一输入]->(A)ItemProcessor[第一输入]->(B)ItemReader[使用处理过的输入从另一个源收集第二输入]->(B)ItemProcessor[使用处理过的第一输入和第二输入]->{repeat B}->ItemWriter(最终结果) 有没有人知道如何在Spring批处理中这样做?多谢了。

  • 我有“N”没有的。客户/客户。对于每个客户/客户,我需要从数据库(读取器)中获取记录,然后我必须处理(处理器)客户/客户的所有记录,然后我必须将记录写入文件(写入器)。 如何将spring批处理作业循环N次?

  • 根据已接受的答案代码,对该代码的以下调整对我起作用: 我已经将这个问题更新到了一个可以正确循环的版本,但是由于应用程序将扩展,能够处理并行是很重要的,我仍然不知道如何在运行时用javaconfig动态地做到这一点... 基于查询列表(HQL查询),我希望每个查询都有一个读取器-处理器-写入器。我当前的配置如下所示: 工单 处理机 作家 目前,该过程对于单个查询来说工作得很好。然而,我实际上有一个查