2012-07-27 112 views
1

是否有任何可能发现,如果一个作业在Spring Batch中重新启动?春季批次:如何找出作业是否重新启动

我们确实提供了一些无需从spring-batch重新启动支持的Tasklet,并且如果重新启动作业,必须执行我们自己的过程。

在找不到JobRepository,JobOperator,JobExplorer等任何可能性

回答

5

定义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 
     } 
    } 
} 

没有编译这一点,但我希望它给一个想法

+0

在我看来,这是一种安静的方式。顺便说一下:我是否认为只有未完成的JobInstances可以重新启动?谢谢你的帮助! – maxhax 2012-07-30 08:14:31

0

潜在的,你可以找到在春天批次的数据库表信息,不记得确切的表的名字,但你可以计算出很快,因为只有几张桌子。我想有一些关于重新启动的信息。

+0

宁愿采用其他方式,不需要直接访问数据库 – maxhax 2012-07-27 10:28:25

1

使用jobExplorer是另一种方式执行以下命令:

jobExplorer.getJobExecutions(jobExplorer.getJobInstance(currentJobExecution.getJobInstance().getId())).size() > 1; 

该语句验证是否存在另一个相同作业(相同ID)的执行。在具有最小控制的环境中,不存在其他执行不是失败或停止执行的可能性。