2016-12-28 104 views
1

我正在使用java配置使用彈簧批量編寫各種作業。監視彈簧批處理作業的進度

我需要獲得工作的當前狀態 該步驟當前正在運行的(我可能會在同一時間運行多個步驟) 哪些步驟失敗(狀態和退出代碼) 等

我看到的唯一在線的例子是基於XML的春天批次和我的只想使用java配置。

謝謝。

+0

你有沒有設置數據庫爲你的工作嗎? 因爲你可以在春季批處理表中讀取所有這些信息。 –

+0

是的,但我認爲使用本地春季批處理代碼會是更好的選擇。你的想法? – Tomer

回答

0

我在spring batch meta data tables上使用了這兩個查詢來了解作業進度和步驟細節。

SELECT * FROM BATCH_JOB_EXECUTION ORDER BY START_TIME DESC; 

SELECT * FROM BATCH_STEP_EXECUTION WHERE JOB_EXECUTION_ID=? ORDER BY STATUS; 

有了第一次查詢,我先找到JOB_EXECUTION_ID相當於我的作業執行,然後使用該ID在第二個查詢找到有關特定步驟的詳細信息。

此外,您的配置選擇(Java或XML)與Spring Batch元數據無關。如果你正在保存數據,那麼它的XML配置或者Java配置是沒有關係的。

對於基於Java的監控 - 您可以使用JobExplorer & JobRepository豆查詢工作等

例如List<JobInstance> from jobExplorer.getJobInstances & jobExplorer.getJobExecutions(jobInstance)

從JobExecutions你可以得到StepExecutions等等。

您可能需要設置JobRegistryBeanPostProcessor豆如下JobExplorer & JobRepository才能正常工作。

@Bean 
    public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(
     JobRegistry jobRegistry) { 
    JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor(); 
    jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry); 
    return jobRegistryBeanPostProcessor; 
    } 
+0

謝謝。 我在考慮更多的春季批處理本地java代碼來做這些測試。 – Tomer

1

另一種選擇是使用JobExplorer

入口點瀏覽運行或歷史的工作和措施的執行。由於數據可能會從持久存儲中重新獲得,因此可能不包含執行激活時可能存在的易失性字段。

List<JobExecution> jobExecutions = jobExplorer.getJobExecutions(jobInstance); 
for (JobExecution jobExecution : jobExecutions) { 
    jobExecution.getStepExecutions(); 
    //read step info 
} 

而對於創建jobExplorer你必須使用廠家:

import org.springframework.batch.core.explore.support.JobExplorerFactoryBean; 
JobExplorerFactoryBean factory = new JobExplorerFactoryBean(); 
factory.setDataSource(dataSource); 
factory.getObject(); 
相關問題