SpringBatch跳過(guò)異常和限制方式
SpringBatch容錯(cuò)處理
1. 案例說(shuō)明
從DB中reader出1000條數(shù)據(jù),chunk = 100,當(dāng)?shù)诙€(gè)chunk出現(xiàn)NullPointerException或者StringIndexOutOfBoundsException異常。業(yè)務(wù)要求batch不終了,程序繼續(xù)執(zhí)行。
2. 跳過(guò)異常限制
下記有兩種實(shí)現(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方法限制最大跳過(guò)數(shù),skip方法限制跳過(guò)的異常類(lèi)型。
這樣某條數(shù)據(jù)出現(xiàn)異常時(shí),并不會(huì)終了step,而是跳過(guò)本條錯(cuò)誤數(shù)據(jù),繼續(xù)處理下一條。
2.2 自定義跳過(guò)配置SkipPolicy 接口
SkipPolicy相對(duì)于skip更加靈活。
例:業(yè)務(wù)要求,userId = 110的用戶(hù)出現(xiàn)上記兩個(gè)異常時(shí),程序終了。
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 跳過(guò)異常。
SpringBatch 錯(cuò)誤積累
1.如果nextStep在該JOB中還沒(méi)有配置
也就是說(shuō)nextStep還不存在的情況下,就會(huì)報(bào)錯(cuò)
<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
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java訪(fǎng)問(wèn)權(quán)限控制的重要性深入講解
這篇文章主要給大家介紹了關(guān)于Java訪(fǎng)問(wèn)權(quán)限控制的重要性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
Java編程線(xiàn)程同步工具Exchanger的使用實(shí)例解析
這篇文章主要介紹了Java編程線(xiàn)程同步工具Exchanger的使用實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
java中struts2實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
這篇文章主要介紹了java中struts2實(shí)現(xiàn)文件上傳下載功能的方法,以實(shí)例形式較為詳細(xì)的分析了struts2實(shí)現(xiàn)文件上傳下載功能的具體實(shí)現(xiàn)技巧與相關(guān)問(wèn)題的解決方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01
spring validation多層對(duì)象校驗(yàn)教程
這篇文章主要介紹了spring validation多層對(duì)象校驗(yàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
java創(chuàng)建一個(gè)類(lèi)實(shí)現(xiàn)讀取一個(gè)文件中的每一行顯示出來(lái)
下面小編就為大家?guī)?lái)一篇java創(chuàng)建一個(gè)類(lèi)實(shí)現(xiàn)讀取一個(gè)文件中的每一行顯示出來(lái)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
SpringBoot項(xiàng)目找不到接口報(bào)404錯(cuò)誤的解決辦法
寫(xiě)了一個(gè)簡(jiǎn)單的springboot項(xiàng)目,在啟動(dòng)的時(shí)候idea未報(bào)錯(cuò),瀏覽器訪(fǎng)問(wèn)接口時(shí)報(bào)404的錯(cuò)誤,所以本文給大家介紹了SpringBoot項(xiàng)目找不到接口報(bào)404錯(cuò)誤的解決辦法,文中有相關(guān)的圖文供大家參考,需要的朋友可以參考下2024-12-12
JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)
本文主要介紹了JAVA簡(jiǎn)單工廠模式(從現(xiàn)實(shí)生活角度理解代碼原理)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
詳解Spring Data JPA動(dòng)態(tài)條件查詢(xún)的寫(xiě)法
本篇文章主要介紹了Spring Data JPA動(dòng)態(tài)條件查詢(xún)的寫(xiě)法 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
java 算法之希爾排序詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了java 算法之希爾排序詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03

