中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • SpringBatch跳過異常限制和自定義跳過配置SkipPolicy接口的方法

SpringBatch跳過異常限制和自定義跳過配置SkipPolicy接口的方法

發布時間:2021-09-08 07:43:41 來源:億速云 閱讀:195 作者:chen 欄目:開發技術

這篇文章主要介紹“SpringBatch跳過異常限制和自定義跳過配置SkipPolicy接口的方法”,在日常操作中,相信很多人在SpringBatch跳過異常限制和自定義跳過配置SkipPolicy接口的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringBatch跳過異常限制和自定義跳過配置SkipPolicy接口的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • SpringBatch容錯處理

    • 1. 案例說明

    • 2. 跳過異常限制

  • SpringBatch 錯誤積累

    • 1.如果nextStep在該JOB中還沒有配置

SpringBatch容錯處理

1. 案例說明

從DB中reader出1000條數據,chunk = 100,當第二個chunk出現NullPointerException或者StringIndexOutOfBoundsException異常。業務要求batch不終了,程序繼續執行。

2. 跳過異常限制

下記有兩種實現方法。

2.1 skip 和 skipLimit配置

  @Bean
  public Step job1step1() throws Throwable {
    return stepBuilderFactory
        .get(_JOB_STEP_NAME)
          .listener(_stepListener)
          .<Model1, Model2>chunk(_CHUNK_SIZE)
          .reader(reader())
          .processor(processor())
          .writer(writer())
          .faultTolerant()
          .skipLimit(10)
          .skip(NullPointerException.class)
          .skip(StringIndexOutOfBoundsException.class)
          .build();
  }

上記代碼示例中的skipLimit方法限制最大跳過數,skip方法限制跳過的異常類型。

這樣某條數據出現異常時,并不會終了step,而是跳過本條錯誤數據,繼續處理下一條。

2.2 自定義跳過配置SkipPolicy 接口

SkipPolicy相對于skip更加靈活。

例:業務要求,userId = 110的用戶出現上記兩個異常時,程序終了。

step代碼

  @Bean
  public Step job1step1() throws Throwable {
    return stepBuilderFactory
        .get(_JOB_STEP_NAME)
          .listener(_stepListener)
          .<Model1, Model2>chunk(_CHUNK_SIZE)
          .reader(reader())
          .processor(processor())
          .writer(writer())
          .faultTolerant()
          .skipPolicy(new SkipPolicyTask())
          .build();
  }

自定義SkipPolicy 接口代碼

public class SkipPolicyTask implements SkipPolicy {
    private static final int MAX_SKIP_COUNT = 10;
    private static final int USER_ID= 110;
 
    @Override
    public boolean isSkipFlg(Throwable throwable, int skipCount) 
      throws SkipLimitExceededException {
 
        if (throwable instanceof NullPointerException && skipCount < MAX_SKIP_COUNT) {
            return true;
        }
 
        if (throwable instanceof StringIndexOutOfBoundsException && skipCount < MAX_SKIP_COUNT ) {
            if(common.getUserId == INVALID_TX_AMOUNT_LIMIT) {
                return false;
            } else {
                return true;
            }
        }
        return false;
    }
 }

return flase 程序終了,retuen true 跳過異常。

SpringBatch 錯誤積累

1.如果nextStep在該JOB中還沒有配置

也就是說nextStep還不存在的情況下,就會報錯

<end on="EIXT WITH IMBALANCE" />
  <next on="BALANCED" to="nextStep" />
<fail on="*" />

Caused by: java.lang.IllegalArgumentException: Missing state for [StateTransition: [state=bain_Job.bainToTableStep, pattern=BALANCED, next=bain_Job.trustAcctBatPayStep]]
at org.springframework.batch.core.job.flow.support.SimpleFlow.initializeTransitions(SimpleFlow.java:283) ~[spring-batch-core-3.0.0.RELEASE.jar:3.0.0.RELEASE]
at org.springframework.batch.core.job.flow.support.SimpleFlow.afterPropertiesSet(SimpleFlow.java:128) ~[spring-batch-core-3.0.0.RELEASE.jar:3.0.0.RELEASE]
at org.springframework.batch.core.configuration.xml.SimpleFlowFactoryBean.getObject(SimpleFlowFactoryBean.java:125) ~[spring-batch-core-3.0.0.RELEASE.jar:3.0.0.RELEASE]
at org.springframework.batch.core.configuration.xml.SimpleFlowFactoryBean.getObject(SimpleFlowFactoryBean.java:46) ~[spring-batch-core-3.0.0.RELEASE.jar:3.0.0.RELEASE]
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168) ~[spring-beans-4.1.5.RELEASE.jar:4.1.5.RELEASE]
... 42 common frames omitted

到此,關于“SpringBatch跳過異常限制和自定義跳過配置SkipPolicy接口的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南丹县| 社旗县| 开封市| 天祝| 通城县| 肇源县| 常熟市| 满洲里市| 襄樊市| 新兴县| 通城县| 长治市| 杭锦后旗| 宜良县| 九江县| 平罗县| 冷水江市| 大洼县| 遂宁市| 囊谦县| 青浦区| 施甸县| 绥滨县| 海安县| 聊城市| 盐边县| 曲靖市| 曲阳县| 塔河县| 农安县| 广饶县| 南昌县| 建湖县| 葵青区| 新疆| 图木舒克市| 太谷县| 吉林省| 五家渠市| 囊谦县| 永昌县|