中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Spring Batch 之 JobParameters (十)

      繼續(xu)前面(mian)關(guan)于(yu)Spring Batch系列的文章,本文主要介紹(shao)與(yu)JobParameters相關(guan)的一些(xie)知識(shi)。

一、JobParameters

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

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

      jobLauncher.run(job, new JobParametersBuilder() 

                                           .addString("para1", "value1") 

                                           .addString("para2","value2")

                                           .toJobParameters()

                              );

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

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

注意需要(yao)設置(zhi)Bean的(de)scope屬(shu)性為step,這是(shi)SpringBatch的(de)一個后綁(bang)定技術,就(jiu)是(shi)在(zai)生(sheng)成Step的(de)時候(hou),才去創建bean,因為這個時候(hou)jobparameter才傳過來(lai)。如果加(jia)載配置(zhi)信息的(de)時候(hou)就(jiu)創建bean,這個時候(hou)jobparameter的(de)值還沒(mei)有(you)產生(sheng),會拋出(chu)異常(chang)。

二、JobParametersValidator

      SpringBatch框(kuang)架支持JobParameters的簡單驗(yan)(yan)證(zheng)(zheng),并提(ti)供了JobParametersValidator接口和(he)validate方法(fa),用(yong)于(yu)在job啟動之前(qian)對(dui)參數信息驗(yan)(yan)證(zheng)(zheng)和(he)檢(jian)查(cha)。如果需(xu)要(yao)對(dui)參數進(jin)行驗(yan)(yan)證(zheng)(zheng),就(jiu)可以(yi)實(shi)現此接口,并在validate方法(fa)中(zhong)定制(zhi)驗(yan)(yan)證(zheng)(zheng)規則,當(dang)驗(yan)(yan)證(zheng)(zheng)失敗的時候,會拋(pao)出JobParametersInvalidException異常。當(dang)然,SpringBatch框(kuang)架也提(ti)供了一個默認的驗(yan)(yan)證(zheng)(zheng)類DefaultJobParametersValidator,但此類驗(yan)(yan)證(zheng)(zheng)功(gong)能有限,主(zhu)要(yao)用(yong)于(yu)必(bi)須(xu)項和(he)非必(bi)須(xu)項的驗(yan)(yan)證(zheng)(zheng)。通(tong)過如下配置(zhi)可以(yi)實(shi)現此驗(yan)(yan)證(zheng)(zheng)功(gong)能。

<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類提(ti)供兩個重要屬性(xing):requiredKeys和optionalKeys,前(qian)者為(wei)JobParameters中(zhong)必(bi)須包(bao)含(han)的(de)項(xiang),但對參(can)數的(de)實際(ji)值不做(zuo)(zuo)check(不做(zuo)(zuo)空的(de)check),只(zhi)要包(bao)含(han)此項(xiang)的(de)key就(jiu)可(ke)(ke)以(yi)了;后者為(wei)可(ke)(ke)選項(xiang),有沒有此項(xiang)都可(ke)(ke)以(yi)。但如果JobParameters中(zhong)含(han)有兩者以(yi)外(wai)的(de)項(xiang),也(ye)會拋出JobParametersInvalidException異常。

三、JobParametersIncrementer

      JobParametersIncrementer主要用(yong)于JobOperator接(jie)口(kou)的startNextInstance等方(fang)(fang)法(fa)(fa)啟動(dong)job的情況下。同(tong)一個(ge)Job在(zai)batch啟動(dong)后被(bei)多(duo)次調用(yong)的場合,startNextInstance方(fang)(fang)法(fa)(fa)將會(hui)非常有用(yong),因為(wei)它將使用(yong)JobParametersIncrementer與Job綁定,創建一個(ge)新實(shi)例。因為(wei)JobParametersIncrementer有一個(ge)getNext方(fang)(fang)法(fa)(fa),可以在(zai)此方(fang)(fang)法(fa)(fa)中為(wei)parameters添加一個(ge)自(zi)增的值,以區分不同(tong)的Job實(shi)例,當然(ran),這個(ge)值在(zai)job的其他的地方(fang)(fang)并(bing)不會(hui)用(yong)到,僅僅是為(wei)了(le)標示不同(tong)JobInstance。當然(ran)SpringBatch框架也(ye)為(wei)我們提供了(le)一個(ge)JobParametersIncrementer的實(shi)現類RunIdIncrementer 。使用(yong)方(fang)(fang)法(fa)(fa)如下:

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

      RunIdIncrementer的getNext方法實現如下(xia):

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();
}

    &nbsp; 由(you)代碼(ma)可以(yi)看出(chu),當parameters為null時,創(chuang)建一(yi)個新的(de)JobParameters,并添(tian)加一(yi)項(xiang)“key”;不為null時,直接給原來的(de)parameters添(tian)加一(yi)項(xiang)。最后直接返回。因為key代表的(de)value每(mei)次(ci)是(shi)都(dou)會在原來的(de)基礎(chu)上(shang)加1,這樣(yang)就保(bao)證了(le)每(mei)次(ci)創(chuang)建的(de)jobInstance是(shi)不同的(de)了(le)。

     以上,就是JobParameters主要知(zhi)識點(dian)的(de)介(jie)紹(shao),下次,將介(jie)紹(shao)SpringBatch其他的(de)一些技術知(zhi)識點(dian)。

 

posted @ 2012-01-31 00:45  孤旅者  閱讀(32997)  評論(1)    收藏  舉報