我有一个动态创建/配置的ReportJob列表,这些列表实现为标准的Spring Batch作业实例。这些作业由Spring Task Scheduler执行
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
// create report jobs
for (Map.Entry<String, ReportConfiguration> entry : jobsConfiguration.getReports().entrySet()) {
final ReportConfiguration reportConfiguration = entry.getValue();
final Job reportJob = createReportJob(entry.getKey(), reportConfiguration);
CronTask ct = new CronTask(new Runnable() {
@Override
public void run() {
final JobParameters jobParameters = new JobParametersBuilder()
.addDate("started", new Date())
.toJobParameters();
try {
jobLauncher.run(reportJob, jobParameters);
} catch (JobExecutionException e) {
LOG.warn("cannot execute reportJob");
}
}
}, reportConfiguration.getCron());
taskRegistrar.addCronTask(ct);
}
}
如您所见,这些作业不是弹跳豆,而是即时创建的。在ItemWriter或Job处理器执行期间是否可以访问JobParameters等?
答案 0 :(得分:0)
如果您知道职位名称,则可以使用JobExplorer来检索jobInstance,并使用相同的JobExplorer从JobInstance中来检索JobExecutions。
答案 1 :(得分:0)
在执行ItemWriter或Job处理器期间是否可以访问JobParameters等?
是的,您可以使用@BeforeStep
回调将步骤执行保存在处理器/写入器中,然后可以从StepExecution
获取访问作业参数。这是一个示例:
public class MyItemWriter implements ItemWriter<Object> {
private StepExecution stepExecution;
public void write(List<? extends Object> items) throws Exception {
JobParameters jobParameters = this.stepExecution.getJobParameters();
// use job parameters
}
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
}
希望这会有所帮助。