欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBatch跳過異常和限制方式

 更新時間:2021年09月07日 16:59:57   作者:籃球場上舊少年  
這篇文章主要介紹了SpringBatch跳過異常和限制方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBatch容錯處理

1. 案例說明

從DB中reader出1000條數(shù)據(jù),chunk = 100,當(dāng)?shù)诙€chunk出現(xiàn)NullPointerException或者StringIndexOutOfBoundsException異常。業(yè)務(wù)要求batch不終了,程序繼續(xù)執(zhí)行。

2. 跳過異常限制

下記有兩種實現(xiàn)方法。

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方法限制最大跳過數(shù),skip方法限制跳過的異常類型。

這樣某條數(shù)據(jù)出現(xiàn)異常時,并不會終了step,而是跳過本條錯誤數(shù)據(jù),繼續(xù)處理下一條。

2.2 自定義跳過配置SkipPolicy 接口

SkipPolicy相對于skip更加靈活。

例:業(yè)務(wù)要求,userId = 110的用戶出現(xiàn)上記兩個異常時,程序終了。

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA內(nèi)存模型和Happens-Before規(guī)則知識點講解

    JAVA內(nèi)存模型和Happens-Before規(guī)則知識點講解

    在本篇文章里小編給大家整理的是一篇關(guān)于JAVA內(nèi)存模型和Happens-Before規(guī)則知識點內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2020-11-11
  • Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢?yōu)镹ull)

    Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢?yōu)镹ull)

    這篇文章主要介紹了Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢?yōu)镹ull),數(shù)據(jù)庫的字段命名方式為使用下劃線連接,對應(yīng)的實體類應(yīng)該是駝峰命名方式,而我使用的是和數(shù)據(jù)庫同樣的命名方式,需要的朋友可以參考下
    2022-01-01
  • Java 如何在switch case語句中聲明變量

    Java 如何在switch case語句中聲明變量

    這篇文章主要介紹了Java 如何在switch case語句中聲明變量,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java測試框架的方法

    java測試框架的方法

    這篇文章主要介紹了java測試框架的方法,文中代碼非常詳細(xì),供大家學(xué)習(xí)和參考,感興趣的朋友可以了解下
    2020-06-06
  • 使用Java編寫GUI對話框的教程

    使用Java編寫GUI對話框的教程

    這篇文章主要介紹了使用Java編寫GUI對話框的教程,是Java圖形化編程中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • 簡述JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別

    簡述JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別

    這篇文章主要介紹了JAVA中堆內(nèi)存與棧內(nèi)存的區(qū)別,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 一文教會Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)

    一文教會Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)

    在使用springMVC框架構(gòu)建web應(yīng)用,客戶端常會請求字符串、整型、json等格式的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于通過一文教會Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 看過就懂的java零拷貝及實現(xiàn)方式詳解

    看過就懂的java零拷貝及實現(xiàn)方式詳解

    這篇文章主要為大家詳細(xì)的介紹了什么是零拷貝,傳統(tǒng)的IO執(zhí)行流程,零拷貝相關(guān)的知識點回顧,零拷貝實現(xiàn)的幾種方式及java提供的零拷貝方式相關(guān)內(nèi)容,有需要的朋友可以借鑒參考下
    2022-01-01
  • SpringBoot壓縮json并寫入Redis的示例代碼

    SpringBoot壓縮json并寫入Redis的示例代碼

    由于業(yè)務(wù)需要,存入redis中的緩存數(shù)據(jù)過大,占用了10+G的內(nèi)存,內(nèi)存作為重要資源,需要優(yōu)化一下大對象緩存,所以我們需要對json進(jìn)行壓縮,本文給大家介紹了SpringBoot如何壓縮Json并寫入redis,需要的朋友可以參考下
    2024-08-08
  • Java動態(tài)代理分析及簡單實例

    Java動態(tài)代理分析及簡單實例

    這篇文章主要介紹了 Java動態(tài)代理分析及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論