我想设置一个新的批处理作业。
该作业应从其余界面接收一些参数(即我正在使用@EnableBatchProcessing进行自动JobScanning)。
我只希望每个休息电话执行一次工作->这就是为什么我认为小任务将是首选武器。但是我没有让@StepScope只能与Tasklet一起工作(似乎没有StepScope时就没有块,但是如果我错了,请纠正我)...
我的另一个想法是创建一个ItemReader,它读取JobParameters并创建一个Domain对象(从Parameters),然后处理数据并写入Dummy ItemWriter。
我试图这样设置ItemReader:
@Bean
@StepScope
public ItemReader<BatchPrinterJob> setupParameterItemReader(
@Value("#{jobParameters}") Map<String, Object> jobParameters) {
ItemReader<BatchPrinterJob> reader = new ItemReader<BatchPrinterJob>() {
@Override
public BatchPrinterJob read()
throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
BatchPrinterJob job = new BatchPrinterJob();
LOG.info(jobParameters.toString());
return job;
}
};
return reader;
}
我试图通过这样的POST请求开始工作:myhost:8080 / jobs / thisjobsname?name = testname
但是唯一要记录的是run.id。
最佳答案
我认为小任务将是选择的武器。但是我没有让@StepScope只能与Tasklet一起工作(似乎没有StepScope时就没有块,但是如果我错了,请纠正我)...
您可以在一个tasklet上使用@StepScope
,这是一个示例:
@Bean
@StepScope
public Tasklet tasklet(@Value("#{jobParameters['parameter']}") String parameter) {
return (contribution, chunkContext) -> {
// use job parameter here
return RepeatStatus.FINISHED;
};
}
然后使用任务集创建步骤:
@Bean
public Step step() {
return this.stepBuilderFactory.get("step")
.tasklet(tasklet(null))
.build();
}
关于java - 无法读取Tasklet/ItemReader中的REST参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59359218/