我有一个弹簧批JdbcCursorItemReader。它被定义为@JobScope。请参阅下面的方法签名
@Bean
@JobScope
public JdbcCursorItemReader<MasterList> queryStagingDbReader(
@Value("#{jobParameters['" + JobParamConstants.PARAM_FROM_DATE + "']}") Date jobFromDate,
@Value("#{jobParameters['" + JobParamConstants.PARAM_TO_DATE + "']}") Date jobToDate) {
这个JdbcCursorItemReader是我工作中第2步的一部分。
在我工作的第一步中,我只有一个tasklet。在这个tasklet中,我正在构建一个日期列表,我希望我在第2步中了解JdbcCursorItemReader。
我最初的想法是将我的日期列表添加到我的tasklet中的stepExecutionContext中。
@Bean
@JobScope
public Tasklet createJobDatesTasklet(
@Value("#{jobParameters['" + JobParamConstants.PARAM_FROM_DATE + "']}") Date jobFromDate,
@Value("#{jobParameters['" + JobParamConstants.PARAM_TO_DATE + "']}") Date jobToDate) {
return new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
LocalDate start = jobFromDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = jobToDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
List<LocalDate> jobDates = new ArrayList<>();
while (!start.isAfter(end)) {
jobDates.add(start);
start = start.plusDays(1);
}
//ADDING TO CONTEXT HERE
chunkContext.getStepContext().getStepExecution().getExecutionContext().put("jobDates", jobDates);
return RepeatStatus.FINISHED;
}
};
}
然后从我的JdbcCursorItemReader中获取日期列表。但是当我尝试在我的JdbcCursorItemReader中抓取步骤执行上下文时,它告诉我它无法连接它。我认为这是因为我的bean是@JobScope。
如何从StepExecutionContext中获取日期列表,或者我可以做其他任何事情让我能够使用它?
提前致谢
答案 0 :(得分:2)
您无法将其写入步骤上下文,而是将其写入作业上下文,以便作业的所有步骤都可以访问以下数据。
StepContext stepContext = chunkContext.getStepContext();
StepExecution stepExecution = stepContext.getStepExecution();
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
jobContext.put("jobDates", jobDates);
以下博客谈论它
http://techie-mixture.blogspot.com/2016/07/passing-values-between-spring-batch.html