我想设置一个新的批处理作业。
这个作业应该从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.
好的,我写了我自己的启动器这个工作基于你的例子:
@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);
}
}
这是它需要的作品!
我认为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运行正常: