日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring batch (四) Job的配置及配置文件说明介绍

發布時間:2025/5/22 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring batch (四) Job的配置及配置文件说明介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容來自《Spring Batch 批處理框架》,作者:劉相。
我只是個搬運工。

一、Spring Batch提供了獨立的標簽用來頂一個Job配置,分別是job、step、tasklet、chunk等。共有6個外層標簽使用,如下:

<batch:job id=""></batch:job><batch:flow id=""></batch:flow> <batch:job-listener></batch:job-listener> <batch:job-repository/> <batch:step id=""></batch:step> <batch:step-listener></batch:step-listener>

?

二、Job配置的標簽和屬性介紹  

  1.job標簽共有6個屬性,分別是:

<batch:job id="" job-repository="" incrementer="" restartable="" parent="" abstract="true"></batch:job>

?

    id:Job名稱,作業的唯一標識。在整個跑批程序運行上下文中不允許重復。
    job-repository:指定作業倉庫。定義該Job運行期間使用的Job倉庫,默認使用名字為jobRepository的Bean。
    incrementer:作業參數遞增器。只有在org.springframework.batch.core.launch.JobOperator 的 startNextInstance方法中使用。
    restartable:作業是否可以重啟。默認是true,表示支持重啟。當設置為true時,只有當JobInstance為FAILED狀態時才可以重啟。
    parent:指定該作業的父類作業。指定當前Job的父Job,Job可以從其他Job繼承。通常在父Job中定義共有的屬性。
    abstract:定義作業是否是抽象的,默認是true,抽象的,不能被實例化。  

  2.job標簽的子元素

<batch:job id="" job-repository="" incrementer="" restartable="" parent="" abstract="true"><batch:step id="" allow-start-if-complete="" next="" parent=""></batch:step><batch:split id="" next="" task-executor=""></batch:split><batch:flow parent="" id=""></batch:flow><batch:decision decider="" id=""></batch:decision><batch:listeners></batch:listeners><batch:validator ref=""></batch:validator><batch:description></batch:description> </batch:job>

?

    step:定義Job的作業步 。

    split:定義并行作業步Step。

    flow:引用獨立配置的作業步流程。

    decision:定義作業步執行的條件判斷器,用于判斷后續執行的作業步。

    listeners:定義作業Job執行時的攔截器。

    validator:定義作業參數檢驗器。也就是JobParameters的驗證器。

    description:描述該作業

  3.Job攔截器    

    Spring Batch框架提供了自己的攔截器,可以在Job執行前后加入自定義的邏輯判斷,自定義攔截器需要實現接口:org.springframework.batch.core.JobExecutionListener。

    JobExecutionListener源碼:

public interface JobExecutionListener {void beforeJob(JobExecution jobExecution);void afterJob(JobExecution jobExecution); }

?

    自定義攔截器:

public class MyListener implements JobExecutionListener {private static final Logger LOGGER = LoggerFactory.getLogger(MyListener.class);@Overridepublic void beforeJob(JobExecution jobExecution) {String jobName = jobExecution.getJobParameters().getString("jobName");LOGGER.info(" -- > beforeJob 攔截的job名稱:[{}]", jobName);}@Overridepublic void afterJob(JobExecution jobExecution) {long instanceId = jobExecution.getJobInstance().getInstanceId();LOGGER.info(" -- > afterJob 攔截的job實例ID:[{}]", instanceId);}}

?

    Job配置攔截器:

<bean id="myListener" class="com.jason.batch.job.listeners.MyListener"></bean><batch:job id="firstJob" job-repository="jobRepository"><!-- 省略其余步驟 --><batch:listeners><batch:listener ref="myListener"></batch:listener></batch:listeners> </batch:job>

?

    需要注意的是:如果攔截器方法出現異常,會導致Job執行的狀態為“FAILED”,所以我們在設置攔截器的時候要注意異常的處理。

    在配置文件中也可以配置多個攔截器,多個攔截器的執行順序按照配置的順序執行。

    <batch:job id="firstJob" job-repository="jobRepository"><!-- 省略其余步驟 --><!-- 多個攔截器配置 --><batch:listeners><batch:listener ref="listener_01"></batch:listener><batch:listener ref="listener_02"></batch:listener><batch:listener ref="listener_03"></batch:listener></batch:listeners></batch:job>

?

    則上面三個攔截器的執行順序是:

      1.調用listener_01攔截器的before方法。

      2.調用listener_02攔截器的before方法。

      3.調用listener_03攔截器的before方法。

      4.調用listener_03攔截器的after方法。

      5.調用listener_02攔截器的after方法。

      6.調用listener_01攔截器的after方法。

    Spring Batch 中不僅可以實現接口設置攔截器,也可以使用注解的方式。這兩種方式的配置方法都是一樣的。

    @BeforeJob:聲明作業執行前的操作

    @AfterJob:聲明作業執行后的操作

  4.Job Parameters校驗    

    Spring Batch框架提供了參數校驗的功能。我們可以實現接口org.springframework.batch.core.JobParametersValidator就可以自定義參數校驗器,也可以使用框架提供的實現類CompositeJobParametersValidator和DefaultJobParametersValidator分別完成不同的功能。

    CompositeJobParametersValidator:參數校驗組合模式,支持一組參數校驗。

    DefaultJobParametersValidator:參數校驗默認實現,支持必須輸入的參數和非必須輸入的參數。

    <!-- 驗證必輸參數jobName和非必輸參數path、jobDay --><bean id="myValidator" class="org.springframework.batch.core.job.DefaultJobParametersValidator"><property name="requiredKeys"><set><value>jobName</value></set></property><property name="optionalKeys"><set><value>path</value><value>jobDay</value></set></property></bean><batch:job id="firstJob" job-repository="jobRepository"><!-- 省略其余步驟 --><batch:validator ref="myValidator"></batch:validator></batch:job>

    接口DefaultJobParametersValidator的源碼:

  public class DefaultJobParametersValidator implements JobParametersValidator, InitializingBean {private Collection<String> requiredKeys;private Collection<String> optionalKeys;// 其余省略}

?

  5.Job 抽象與繼承    

    Spring Batch框架支持抽象job的定義和Job的繼承特性,抽象Job和java中的抽象類相似。抽象的Job不能被實例化,直接調用抽象的Job會報錯。定義Job是將abstract設置為true即為抽象Job。

    <batch:job id="baseJob" abstract="true"><batch:listeners><batch:listener ref="baseListeners"></batch:listener></batch:listeners></batch:job>

?

    通過parent屬性可以指定當前Job的父Job,子Job繼承父Job可以獲得父類中所有屬性和能力,可以多個Job繼承同一個抽象父Job。

  <batch:job id="firstJob" parent="baseJob"><!-- 省略其余步驟 --><batch:listeners merge="true"><batch:listener ref="myListener"></batch:listener></batch:listeners></batch:job>

?

    上面firstJob繼承了baseJob父類,攔截器merge為true表示firstJob具有baseListeners和myListener兩個攔截器的功能,如果merge為false,則子類的攔截器會覆蓋掉父類Job中攔截器的功能。

三、Job的高級特性  

  1.scope    

    scope用來聲明IOC容器中對象的存活周期,具體見:https://www.cnblogs.com/whx20100101/p/9807252.html

    Step scope 是Spring Batch 框架提供的自定義的Scope,將Bean的scope=“step”,表示該bean在Step開始的時候初始化,在Step結束的時候銷毀bean,
    在Spring Batch框架中,step scope會被自動注冊到Spring的上下文中,如果沒有使用Spring的配置文件,則需要顯示的聲明step scope。

    <!-- 顯示的聲明StepScope --> <bean class="org.springframework.batch.core.scope.StepScope"/><!-- 聲明bean的scope為step --> <bean id="fileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"></bean>

?

    

?

轉載于:https://www.cnblogs.com/whx20100101/p/10636351.html

總結

以上是生活随笔為你收集整理的spring batch (四) Job的配置及配置文件说明介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。