当前位置: 首页 > 知识库问答 >
问题:

无法读取Tasklet/ItemReader中的REST参数

凌嘉志
2023-03-14

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

这个作业应该从Rest接口接收一些参数(我正在使用@EnableBatchProcessing进行自动作业扫描)。

我只希望在每次Rest通话中执行一次任务-

我的另一个想法是创建一个ItemReader,它读取JobParameters并创建一个域对象(从参数中),然后处理数据并写入一个虚拟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;
}

我试着用这样的发帖请求开始这份工作:myhost:8080/jobs/thisjobsname?name=testname

但唯一被记录的是run.id.

共有2个答案

罗飞宇
2023-03-14

好的,我写了我自己的启动器这个工作基于你的例子:

@RestController
public class AutoPrintLaunchingController {

@Autowired
private JobLauncher jobLauncher;

@Autowired
private AutoPrint autoprint;

@RequestMapping(value = "/jobs/AutoPrint", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.ACCEPTED)
public void launch(@RequestParam("Drucker") String printer, @RequestParam("Fach") String fach,
        @RequestParam("Dokument") String doc, @RequestParam("DokumentParameter") String param) throws Exception {

    JobParametersBuilder jpb = new JobParametersBuilder();
    jpb.addString("Drucker", printer);
    jpb.addString("Fach", fach);
    jpb.addString("Dokument", doc);
    jpb.addString("DokumentParameter", param);
    jpb.addDate("dateInstant", Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()));

    JobParameters jobParameters = jpb.toJobParameters();
    this.jobLauncher.run(autoprint.createAutoPrintJob(), jobParameters);
}

}

这是它需要的作品!

楚嘉纳
2023-03-14

我认为tasklet将是首选的武器。但是我没有让@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;
    };
}

然后使用tasklet创建步骤:

@Bean
public Step step() {
    return this.stepBuilderFactory.get("step")
            .tasklet(tasklet(null))
            .build();
}
 类似资料:
  • 是否可以使用spring batch Itemreader(在单个读取器中)读取两个不同的文件,并比较这两个文件中存在的属性(如ID列)。基于这些使用Itemprocessor和Itemwriter的ID的比较,将在新文件中使用Itemwriter写入记录

  • 问题内容: 所以我有这段代码: 最初我是正常人,但是我更改为这个,因为我认为这可能是标题问题。但是我仍然没有检测,我也没有。但是,它正在接收数据。 知道有什么问题吗? 编辑 好吧,我想我知道怎么了。它将其作为json对象发布,因此只能在php:// input中读取。如何在axios中将其更改为普通字符串? 问题答案: 从文档中(我没有在引用的材料中保留链接): 默认情况下,axios将JavaS

  • 以下是我的Spring批处理用例。 > 处理记录。 将处理过的记录逐一写入。 我很清楚第2步和第3步的内容,但不知道如何实现一个可以一次性读取所有记录的读卡器。如何将记录逐一传递给项目处理者/编写者?我应该使用tasklet而不是reader/writer吗?

  • 问题内容: 我已经编写了一个程序来加密Netbeans中的图像。从Netbeans运行时,该程序运行良好,但是当我将其构建为.jar文件时,即使我将图像文件与.jar文件放在同一文件夹中,它也无法读取图像。 //加密 //加载/写入图片 问题答案: 目前尚不清楚以下哪个触发您的错误。这个 将从当前目录读取,该目录不一定与您的jar文件所在的目录相同。 这个 将从类所在的jar文件中的目录中读取。请

  • 我试图在Springboot应用程序中使用logback-spring.xml创建日志记录功能,但是无法读取logback-spring.xml文件中的属性值(例如:log.dest.path)。 我通过@PropertySource基于概要文件动态加载不同环境(开发、阶段、生产)的属性文件(YAML)。概要分析工作正常,并且加载了正确的YAML文件(例如:- application.dev.ym

  • 问题内容: 我正在通过https://www.digitalocean.com/community/tutorials/how-to-serv-django- applications-with-uwsgi-and-nginx-on- ubuntu-16-04进行 工作。我已经完成测试,但出现502错误。 我的nginx服务器块配置文件: nginx错误日志显示: 在我看来,uwsgi运行正常: