簡體   English   中英

如何查找先前未在Spring Batch中運行的任何先前運行的作業/任務? 我嘗試了一些代碼,但不確定

[英]How to find any of previously running job/task is not running in spring batch? I hv tried some code but not sure

我已經編寫了一個春季批處理作業,每10分鍾使用調度程序執行一次。 現在,這項工作的主要任務是將數據從一個數據庫傳輸到另一個數據庫。

我面臨的問題是,有時可能會有大量數據,可能需要超過10分鍾的作業執行時間。 在這種情況下,我想檢測是否有任何作業正在運行? 如果不是,那么我將重新運行一個新的作業實例。 如果該作業已經在運行,那么我將跳過“新作業實例調用”。 我寫了一些如下的代碼。

Job job = (Job) context.getBean("job");

JobExplorer explorer = (JobExplorer) context.getBean("jobExplorer");

// Fetching all job instances.
List<JobInstance> jobInstances = explorer.findJobInstancesByJobName(
        job.getName(), 0, explorer.getJobInstanceCount(job.getName()));

// Fetching the last job instance.
JobInstance lastJobInstance = jobInstances.get(0);

//Obtain all executions for last job instance.
List<JobExecution> executions = explorer.getJobExecutions(lastJobInstance);

// fetching last job execution
JobExecution lastJobExecution = executions.get(0);

System.out.println("Is my last Job running? \nAns:"+lastJobExecution.isRunning());

幾件事,這段代碼是檢查以前所有正在運行的作業。 我所假設的是,如果我啟動服務器,那么在服務器啟動之前不會再運行其他作業;如果我在檢查先前的作業運行之后是否運行了作業,那么我會認為我的調度程序代碼中不會再調用其他作業。

我想知道這是正確的方法嗎? 我的意思是確保同一時間只為同一作業運行一個作業實例,並且在同一作業的所有先前運行完成之后也是如此。

PS作業實例以及jObExplorer和jobLauncher被注入到調度程序中。 這只是一個類似的代碼,因此可以使用上下文獲取bean。

感謝您的閱讀。

如果您使用的是調度程序,則可能應該有一個JobLauncherDetails類,可以在其中添加諸如

JobParameters jobParameters = getJobParametersFromJobMap(jobDataMap);

這些參數之一可以是您的最后一次運行時間,可以在此地圖上添加dateTime參數,並使用JobCompletionReader的實例

jobCompletionReader.getLastCompleteDate()

將其與10分鍾前進行比較,看看您是否已完成“ 10分鍾前的工作”。 這樣的東西應該適合您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM