一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBatch跳過異常和限制方式

SpringBatch跳過異常和限制方式

2021-12-23 12:46籃球場上舊少年 Java教程

這篇文章主要介紹了SpringBatch跳過異常和限制方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBatch容錯處理

1. 案例說明

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

2. 跳過異常限制

下記有兩種實現方法。

2.1 skip 和 skipLimit配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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 接口代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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還不存在的情況下,就會報錯

?
1
2
3
<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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixin_52914285/article/details/110188852

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 韩国三级理韩国三级理人伦 | 日本老妇和子乱视频 | 91视频99 | 国产精品极品美女自在线 | 欧美成人精品福利网站 | 爱情岛论坛亚洲一号路线 | 免费一级特黄特色大片在线观看 | 国产精品 视频一区 二区三区 | 国内精品免费 | 午夜影院网页 | 天堂资源8中文最新版 | 日本高h| 人与动人物性行为zozo共患病 | 国产自拍视频一区 | 91尤物在线 | 国内精品福利丝袜视频_速 国内精品91久久久久 | jizzjizz3d动漫| 国产123区在线视频观看 | 好湿好紧太硬了我好爽 | 免费观看在线永久免费xx视频 | 国产90后美女露脸在线观看 | 亚洲精品AV无码喷奶水糖心 | 香蕉久久久久久狠狠色 | 岛国不卡 | 国产一区二区三区欧美 | 国产成人99精品免费观看 | 日韩欧美国产成人 | 91制片厂(果冻传媒)原档破解 | 国产精品久久久久久久久免费 | hezyo加勒比一区二区三区 | 99久久精品免费看国产四区 | 亚洲日韩欧美一区二区在线 | www.色啪啪.com| 亚洲 欧美 清纯 校园 另类 | www免费视频com | 天天天天天干 | 亚洲女人国产香蕉久久精品 | a级毛片毛片免费很很综合 a级黄色视屏 | 女暴露狂校园裸露小说 | 无人区在线观看免费视频国语 | 亚洲精品私拍国产福利在线 |