我有一个要求,我需要从xls读取值(其中存在名为netCreditAmount的列)并将值保存在数据库中。要求是从所有行添加netCreditAmount的值,然后在数据库中仅为xls中的第一行设置此总和,并插入剩余的行及其对应的netCreditAmounts。 我应该如何继续Spring Batch中的实现。正常的读者,处理器和编写器工作正常,但我应该在哪里插入此实现? 谢谢!
答案 0 :(得分:0)
那么问题是什么? 您需要设置批处理作业步骤以使用reader-processor-writer。
Reader有界面:
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();
答案 1 :(得分:0)
Yo可以通过添加额外的tasklet来解决这个问题。 工作流程可以如下所示
@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;
}
}