本文介紹了Spring Batch限制跨多個服務器的單個作業實例的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個Spring批處理作業,可能會跨多個服務器運行。我有一個偵聽器,可以防止作業的多個實例在一臺服務器上同時運行。但是,我希望確保此作業不能在多臺服務器上同時運行。
我已搜索,但找不到此問題的解決方案
推薦答案
我實現了一個偵聽器,該偵聽器檢查與某個名稱匹配的Spring批處理控制表中正在運行的Job執行的次數。如果執行大小超過1,則當前作業的jobExecution失敗。代碼如下:
@Component
public class SingleInstanceListener implements JobExecutionListener {
@Autowired
private JobExplorer explorer;
@Override
public void beforeJob(JobExecution jobExecution) {
String jobName = jobExecution.getJobInstance().getJobName();
Set<JobExecution> executions = explorer.findRunningJobExecutions(jobName);
if(executions.size() > 1) {
jobExecution.stop();
}
}
@Override
public void afterJob(JobExecution jobExecution) {
}
}
這篇關于Spring Batch限制跨多個服務器的單個作業實例的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,