1. 程式人生 > >跑批利器--SpringBatch框架

跑批利器--SpringBatch框架

Spring Batch的框架包括啟動批處理作業的元件和儲存Job執行產生的元資料。如果你作為一個批處理應用程式的開發人員,你暫時沒有必要跟這些元件打交道,因為它們主要為我們提供元件支援的角色,但是您需要配置這個基礎框架在你的批處理應用程式中。

  啟動Jobs並存儲Job元資料.

         Spring Batch框架本身還是比較複雜的,但是我們開始接觸它的時候主要是處理兩個元件:Job LauncherJob Repository.這兩個概念對應著的java介面分別是:JobLauncher JobRepository.

JobLauncher

對於Spring Batch

這個框架裡的小世界而言.JobLauncher是連線它跟外面世界的一個入口,具體SpringBatch如何跟外界進行互動,文章結尾會進行簡單的說明.相對而言JobLauncher介面還是比較簡單的,如下:

packageorg.springframework.batch.core.launch;

(...)

publicinterface JobLauncher {

publicJobExecution run(Job job, JobParameters jobParameters)

throwsJobExecutionAlreadyRunningException,

JobRestartException,JobInstanceAlreadyCompleteException,

JobParametersInvalidException;

}

       JobLauncher介面接受兩個引數:JobJobParameters.那麼誰來呼叫這個Job Launcher?當然,我們首先可以通過java程式來通過JobLauncher來啟動,也可以通過定時任務例如Quartz scheduler來啟動.

       JobRepository

      JobRepository保持著所有Job執行的相關元資料,JobRepositoryjava介面如下:

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的核心元件以及他們如何跟外部世界進行互動.