Spring Batch 之 JobParameters (十)


      繼續前面關於Spring Batch系列的文章,本文主要介紹與JobParameters相關的一些知識。

一、JobParameters

      顧名思義,所謂JobParameters,就是Job運行時的參數。它在bath中有兩個作用:一是標示不同的jobInstance,二是作為job中用到的信息,以參數的形式傳給job。

      如何使用JobParameters呢?它主要是在啟動的job的時候,與job聯系起來的。看一下框架提供的啟動job的接口JobLauncher的源代碼,就會發現其run方法需要兩個參數,一個是Job,也就是需要啟動的job,另一個就是JobParameters。可以通過如下方式使用:

      jobLauncher.run(job, new JobParametersBuilder() 

                                           .addString("para1", "value1") 

                                           .addString("para2","value2")

                                           .toJobParameters()

                              );

如代碼所示,參數para1和para2就可以傳給Job了,在Job中如果需要使用參數信息,可以使用Spring注入的方式傳給不同的使用對象。

<bean:bean id="itemReader" class="com.wanggc.springbatch.BatchItemReader" scope="step">
<bean:property name="filePath" value="#{jobParameters['inputFilePath']}" />
</bean:bean>

注意需要設置Bean的scope屬性為step,這是SpringBatch的一個后綁定技術,就是在生成Step的時候,才去創建bean,因為這個時候jobparameter才傳過來。如果加載配置信息的時候就創建bean,這個時候jobparameter的值還沒有產生,會拋出異常。

二、JobParametersValidator

      SpringBatch框架支持JobParameters的簡單驗證,並提供了JobParametersValidator接口和validate方法,用於在job啟動之前對參數信息驗證和檢查。如果需要對參數進行驗證,就可以實現此接口,並在validate方法中定制驗證規則,當驗證失敗的時候,會拋出JobParametersInvalidException異常。當然,SpringBatch框架也提供了一個默認的驗證類DefaultJobParametersValidator,但此類驗證功能有限,主要用於必須項和非必須項的驗證。通過如下配置可以實現此驗證功能。

<job id="batchJob">            
......
<validator ref="jobParametersValidator" />
</job>
<bean:bean id="jobParametersValidator"
class
="org.springframework.batch.core.job.DefaultJobParametersValidator">
<bean:property name="requiredKeys">
<bean:set>
<bean:value>para1</bean:value>
<bean:value>para2</bean:value>
<bean:value>para3</bean:value>
</bean:set>
</bean:property>
<bean:property name="optionalKeys">
<bean:set>
<bean:value>para4</bean:value>
</bean:set>
</bean:property>
</bean:bean>

      DefaultJobParametersValidator類提供兩個重要屬性:requiredKeys和optionalKeys,前者為JobParameters中必須包含的項,但對參數的實際值不做check(不做空的check),只要包含此項的key就可以了;后者為可選項,有沒有此項都可以。但如果JobParameters中含有兩者以外的項,也會拋出JobParametersInvalidException異常。

三、JobParametersIncrementer

      JobParametersIncrementer主要用於JobOperator接口的startNextInstance等方法啟動job的情況下。同一個Job在batch啟動后被多次調用的場合,startNextInstance方法將會非常有用,因為它將使用JobParametersIncrementer與Job綁定,創建一個新實例。因為JobParametersIncrementer有一個getNext方法,可以在此方法中為parameters添加一個自增的值,以區分不同的Job實例,當然,這個值在job的其他的地方並不會用到,僅僅是為了標示不同JobInstance。當然SpringBatch框架也為我們提供了一個JobParametersIncrementer的實現類RunIdIncrementer 。使用方法如下:

<job id="batchJob" incrementer="sampleIncrementer">        
......
<validator ref="jobParametersValidator" />
</job>
<bean:bean id="sampleIncrementer"
class
="org.springframework.batch.core.launch.support.RunIdIncrementer"/>

      RunIdIncrementer的getNext方法實現如下:

public JobParameters getNext(JobParameters parameters) {            
if (parameters == null) {
parameters = new JobParameters();
}
long id = parameters.getLong(key, 0L) + 1;
return new JobParametersBuilder(parameters).addLong(key, id).toJobParameters();
}

      由代碼可以看出,當parameters為null時,創建一個新的JobParameters,並添加一項“key”;不為null時,直接給原來的parameters添加一項。最后直接返回。因為key代表的value每次是都會在原來的基礎上加1,這樣就保證了每次創建的jobInstance是不同的了。

     以上,就是JobParameters主要知識點的介紹,下次,將介紹SpringBatch其他的一些技術知識點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM