跑批利器--SpringBatch框架
Spring Batch的框架包括啟動批處理作業的元件和儲存Job執行產生的元資料。如果你作為一個批處理應用程式的開發人員,你暫時沒有必要跟這些元件打交道,因為它們主要為我們提供元件支援的角色,但是您需要配置這個基礎框架在你的批處理應用程式中。
啟動Jobs並存儲Job元資料.
Spring Batch框架本身還是比較複雜的,但是我們開始接觸它的時候主要是處理兩個元件:Job Launcher和Job Repository.這兩個概念對應著的java介面分別是:JobLauncher和 JobRepository.
JobLauncher
對於Spring Batch
packageorg.springframework.batch.core.launch;
(...)
publicinterface JobLauncher {
publicJobExecution run(Job job, JobParameters jobParameters)
throwsJobExecutionAlreadyRunningException,
JobRestartException,JobInstanceAlreadyCompleteException,
JobParametersInvalidException;
}
JobLauncher介面接受兩個引數:Job和JobParameters.那麼誰來呼叫這個Job Launcher呢?當然,我們首先可以通過java程式來通過JobLauncher來啟動,也可以通過定時任務例如Quartz scheduler來啟動.
JobRepository
JobRepository保持著所有Job執行的相關元資料,JobRepository的java介面如下:
packageorg.springframework.batch.core.repository;
(...)
publicinterface JobRepository {
booleanisJobInstanceExists(String jobName, JobParameters jobParameters);
JobExecutioncreateJobExecution(
StringjobName, JobParameters jobParameters)
throwsJobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException;
voidupdate(JobExecution jobExecution);
voidadd(StepExecution stepExecution);
voidupdate(StepExecution stepExecution);
voidupdateExecutionContext(StepExecution stepExecution);
voidupdateExecutionContext(JobExecution jobExecution);
StepExecutiongetLastStepExecution(JobInstance jobInstance,
StringstepName);
intgetStepExecutionCount(JobInstance jobInstance, String stepName);
JobExecutiongetLastJobExecution(String jobName,
JobParametersjobParameters);
}
JobResponseitory 介面提供所有的服務來管理批量任務的生命週期,包括建立,更新等等.一般而言job啟動器會把job的建立任務委託給Job Repository來做,同時job也會在它執行的過程中來讓Job Repository儲存它當然的狀態.
下面我們來看看Spring Batch 是如何跟外部系統進行互動的,先看一下下圖.
一個批量應用程式並不是一個孤島,它也需要跟外面的世界比如一些企業專案進行互動,上圖基本上涵蓋了它的互動內容.
一個job的啟動通常是一個事件來進行觸發的,我們會經常用到JobLauncher介面和JobParameters類,但是這個事件是可以來自任何地方的,例如一個系統的定時器;一個http請求到web控制器來啟動job等這就是Spring Batch 和外界的介入點.
另外批量Job程式基本上都是用來處理各種資料的,所以上圖中我們可以看到SpringBatch的出口都是在跟資料來源進行打交道,這些資料來源可以是任何型別,但是檔案系統和資料庫是最常用的,當然它也可以支援寫訊息給JMS.
到目前為止我們已經瞭解SpringBatch的核心元件以及他們如何跟外部世界進行互動.