我想设置一个新的批处理作业。

该作业应从其余界面接收一些参数(即我正在使用@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/

10-10 04:19