【发布时间】:2020-02-19 20:14:09
【问题描述】:
我正在尝试为当前正在运行的 spring 批处理 tasklet 设置和检索进度信息。
我有一个基于一步的简单春季批处理作业,例如。
public Step jobStep() {
return stepBuilderFactory.get(JOB_STEP_1)
.tasklet((contribution, chunkContext) -> {
...
}).build();
}
tasklet 是一个简单的循环做一些事情,这可能需要很多时间。
在循环中的每次迭代之后,我都会在 JobExecutionContext 中设置一些进度信息,例如。
chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put("myJobStatus", "10 of 100 finished");
从另一个线程(例如休息服务)我想检查实际小任务的进度,我为此使用 JobExplorer
String status = (String)jobExplorer.getJobExecution(jobId).getExecutionContext().get("myJobStatus");
不幸的是,myJobStatus 属性仅在步骤或作业完成时设置。我什至尝试用步骤循环替换简单循环,但结果相同。
还有其他方法可以设置和访问当前正在运行的作业的进度信息吗?
我将 DefaultBatchConfigurer 与基于 JDBC 的 JobRepository 等一起使用。
【问题讨论】: