【发布时间】:2019-07-30 02:38:22
【问题描述】:
我正在尝试使用 Spring Boot 和 Spring Batch 实现并行处理。此批次将通过一些必需参数从 UI 触发
我需要根据请求参数创建步骤,我尝试如下,
其余控制器看起来,
JobParameters jobParameters = new JobParametersBuilder().addLong("JobID",System.currentTimeMillis())
.addString("fileName", filename)
.addString("buisinessDate", model.getGeneralServiceModel().getBusinessDate())
.addString("source", model.getGeneralServiceModel().getSource())
.toJobParameters();
jobLauncher.run(job, jobParameters);
还有批处理配置:
Flow masterFlow = (Flow)new FlowBuilder("masterFlow").start(stepOne()).build();
List<Step> steps = new ArrayList<Step>();
for (ConcurrentLinkedQueue date : taskOne.readFile()) {
steps.add(createStep(date));
}
return jobs.get("myJob")
.start(masterFlow)
.next(createParallelFlow(steps))
.end()
.build();
masterFlow 将作业参数读入其变量中,readFile() 给出列表(基于此,必须创建步骤),为此需要 jobParameters。
问题是:
在启动我的应用程序本身时,readFile() 正在执行。但是我需要在作业通过 RestController 触发时执行它,因为它具有所需的参数。
如何在启动应用程序时停止此执行?
【问题讨论】:
-
不清楚你在问什么。在标题中你说
create steps based on the step1 result,在问题中你说I need to create steps based on the request parameters。这些是不同的东西。请澄清您的问题并举一个带有真实参数的示例,以了解您要实现的目标。 -
我需要根据 step1 结果创建步骤。但为了处理第 1 步,我需要请求参数。
标签: multithreading spring-boot parallel-processing spring-batch tasklet