是否有任何可能发现,如果一个作业在Spring Batch中重新启动?春季批次:如何找出作业是否重新启动
我们确实提供了一些无需从spring-batch重新启动支持的Tasklet,并且如果重新启动作业,必须执行我们自己的过程。
在找不到JobRepository,JobOperator,JobExplorer等任何可能性
是否有任何可能发现,如果一个作业在Spring Batch中重新启动?春季批次:如何找出作业是否重新启动
我们确实提供了一些无需从spring-batch重新启动支持的Tasklet,并且如果重新启动作业,必须执行我们自己的过程。
在找不到JobRepository,JobOperator,JobExplorer等任何可能性
定义JobExplorer豆要求特性
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="lobHandler"/>
</bean>
查询它与你的工作名
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
}
}
}
没有编译这一点,但我希望它给一个想法
潜在的,你可以找到在春天批次的数据库表信息,不记得确切的表的名字,但你可以计算出很快,因为只有几张桌子。我想有一些关于重新启动的信息。
宁愿采用其他方式,不需要直接访问数据库 – maxhax 2012-07-27 10:28:25
使用jobExplorer是另一种方式执行以下命令:
jobExplorer.getJobExecutions(jobExplorer.getJobInstance(currentJobExecution.getJobInstance().getId())).size() > 1;
该语句验证是否存在另一个相同作业(相同ID)的执行。在具有最小控制的环境中,不存在其他执行不是失败或停止执行的可能性。
在我看来,这是一种安静的方式。顺便说一下:我是否认为只有未完成的JobInstances可以重新启动?谢谢你的帮助! – maxhax 2012-07-30 08:14:31