是否有可能找出,如果在 Spring Batch 中重新启动作业?
我们确实提供了一些没有来自 spring-batch 的重新启动支持的 Tasklet,并且如果作业重新启动,我们必须实现我们自己的程序。
在 JobRepository、JobOperator、JobExplorer 等中找不到任何可能性。
是否有可能找出,如果在 Spring Batch 中重新启动作业?
我们确实提供了一些没有来自 spring-batch 的重新启动支持的 Tasklet,并且如果作业重新启动,我们必须实现我们自己的程序。
在 JobRepository、JobOperator、JobExplorer 等中找不到任何可能性。
Define a JobExplorer bean with required properties
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="lobHandler"/>
</bean>
Query it with your jobName
List<JobInstance> jobInstances= jobExplorer.getJobInstances(jobName);
for (JobInstance jobInstance : jobInstances) {
List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(jobInstance);
for (JobExecution jobExecution : jobExecutions) {
if (jobExecution.getExitStatus().equals(ExitStatus.COMPLETED)) {
//You found a completed job, possible candidate for a restart
//You may check if the job is restarted comparing jobParameters
JobParameters jobParameters = jobInstance.getParameters();
//Check your running job if it has the same jobParameters
}
}
}
Did not compile this but I hope it gives an idea
使用 jobExplorer 的另一种方法是执行以下命令:
jobExplorer.getJobExecutions(jobExplorer.getJobInstance(currentJobExecution.getJobInstance().getId())).size() > 1;
此语句验证是否存在相同作业(相同 id)的另一个执行。在具有最小控制的环境中,不存在其他执行不是失败或停止执行的可能性。
可能您可以在 spring-batch 的数据库表中找到此信息,不记得确切的表的名称,但您可以快速弄清楚,因为只有很少的表。我想有一些关于重启的信息。