精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

配置 Spring Batch 批處理失敗重試

開發 前端
默認情況下,Spring批處理作業在執行過程中出現任何錯誤都會失敗。然而有些時候,為了提高應用程序的彈性,我們就需要處理這類間歇性的故障。在這篇短文中,我們就來一起探討 如何在Spring批處理框架中配置重試邏輯。

[[357093]]

 1. 引言

默認情況下,Spring批處理作業在執行過程中出現任何錯誤都會失敗。然而有些時候,為了提高應用程序的彈性,我們就需要處理這類間歇性的故障。在這篇短文中,我們就來一起探討 如何在Spring批處理框架中配置重試邏輯。

如果對spring batch不了解,可以參考以前的一篇文章:

開車!Spring Batch 入門級示例教程!

2. 簡單舉例

假設有一個批處理作業,它讀取一個CSV文件作為輸入:

  1. username, userid, transaction_date, transaction_amount 
  2. sammy, 1234, 31/10/2015, 10000 
  3. john, 9999, 3/12/2015, 12321 

然后,它通過訪問REST端點來處理每條記錄,獲取用戶的 age 和 postCode 屬性:

  1. public class RetryItemProcessor implements ItemProcessor<TransactionTransaction> { 
  2.      
  3.     @Override 
  4.     public Transaction process(Transaction transaction) throws IOException { 
  5.         log.info("RetryItemProcessor, attempting to process: {}"transaction); 
  6.         HttpResponse response = fetchMoreUserDetails(transaction.getUserId()); 
  7.         //parse user's age and postCode from response and update transaction 
  8.         ... 
  9.         return transaction
  10.     } 
  11.     ... 

最后,它生成并輸出一個合并的XML:

  1. <transactionRecord> 
  2.     <transactionRecord> 
  3.         <amount>10000.0</amount> 
  4.         <transactionDate>2015-10-31 00:00:00</transactionDate> 
  5.         <userId>1234</userId> 
  6.         <username>sammy</username> 
  7.         <age>10</age> 
  8.         <postCode>430222</postCode> 
  9.     </transactionRecord> 
  10.     ... 
  11. </transactionRecord> 

3. ItemProcessor 中添加重試

現在假設,如果到REST端點的連接由于某些網絡速度慢而超時,該怎么辦?如果發生這種情況,則我們的批處理工作將失敗。

在這種情況下,我們希望失敗的 item 處理重試幾次。因此,接下來我將批處理作業配置為:在出現故障時執行最多三次重試:

  1. @Bean 
  2. public Step retryStep( 
  3.   ItemProcessor<TransactionTransaction> processor, 
  4.   ItemWriter<Transaction> writer) throws ParseException { 
  5.     return stepBuilderFactory 
  6.       .get("retryStep"
  7.       .<TransactionTransaction>chunk(10) 
  8.       .reader(itemReader(inputCsv)) 
  9.       .processor(processor) 
  10.       .writer(writer) 
  11.       .faultTolerant() 
  12.       .retryLimit(3) 
  13.       .retry(ConnectTimeoutException.class) 
  14.       .retry(DeadlockLoserDataAccessException.class) 
  15.       .build(); 

這里調用了 faultTolerant() 來啟用重試功能。另外,我們使用 retry 和 retryLimit 分別定義符合重試條件的異常和 item 的最大重試次數。

4. 測試重試次數

假設我們有一個測試場景,其中返回 age 和 postCode 的REST端點關閉了一段時間。在這個測試場景中,我們只對前兩個 API 調用獲取一個 ConnectTimeoutException ,而第三個調用將成功:

  1. @Test 
  2. public void whenEndpointFailsTwicePasses3rdTime_thenSuccess() throws Exception { 
  3.     FileSystemResource expectedResult = new FileSystemResource(EXPECTED_OUTPUT); 
  4.     FileSystemResource actualResult = new FileSystemResource(TEST_OUTPUT); 
  5.  
  6.     when(httpResponse.getEntity()) 
  7.       .thenReturn(new StringEntity("{ \"age\":10, \"postCode\":\"430222\" }")); 
  8.   
  9.     //fails for first two calls and passes third time onwards 
  10.     when(httpClient.execute(any())) 
  11.       .thenThrow(new ConnectTimeoutException("Timeout count 1")) 
  12.       .thenThrow(new ConnectTimeoutException("Timeout count 2")) 
  13.       .thenReturn(httpResponse); 
  14.  
  15.     JobExecution jobExecution = jobLauncherTestUtils 
  16.       .launchJob(defaultJobParameters()); 
  17.     JobInstance actualJobInstance = jobExecution.getJobInstance(); 
  18.     ExitStatus actualJobExitStatus = jobExecution.getExitStatus(); 
  19.  
  20.     assertThat(actualJobInstance.getJobName(), is("retryBatchJob")); 
  21.     assertThat(actualJobExitStatus.getExitCode(), is("COMPLETED")); 
  22.     AssertFile.assertFileEquals(expectedResult, actualResult); 

在這里,我們的工作成功地完成了。另外,從日志中可以明顯看出 第一條記錄 id=1234 失敗了兩次,最后在第三次重試時成功了:

  1. 19:06:57.742 [main] INFO  o.s.batch.core.job.SimpleStepHandler - Executing step: [retryStep] 
  2. 19:06:57.758 [main] INFO  o.b.batch.service.RetryItemProcessor - Attempting to process user with id=1234 
  3. 19:06:57.758 [main] INFO  o.b.batch.service.RetryItemProcessor - Attempting to process user with id=1234 
  4. 19:06:57.758 [main] INFO  o.b.batch.service.RetryItemProcessor - Attempting to process user with id=1234 
  5. 19:06:57.758 [main] INFO  o.b.batch.service.RetryItemProcessor - Attempting to process user with id=9999 
  6. 19:06:57.773 [main] INFO  o.s.batch.core.step.AbstractStep - Step: [retryStep] executed in 31ms 

同樣,看下另一個測試用例,當所有重試次數都用完時會發生什么:

  1. @Test 
  2. public void whenEndpointAlwaysFail_thenJobFails() throws Exception { 
  3.     when(httpClient.execute(any())) 
  4.       .thenThrow(new ConnectTimeoutException("Endpoint is down")); 
  5.  
  6.     JobExecution jobExecution = jobLauncherTestUtils 
  7.       .launchJob(defaultJobParameters()); 
  8.     JobInstance actualJobInstance = jobExecution.getJobInstance(); 
  9.     ExitStatus actualJobExitStatus = jobExecution.getExitStatus(); 
  10.  
  11.     assertThat(actualJobInstance.getJobName(), is("retryBatchJob")); 
  12.     assertThat(actualJobExitStatus.getExitCode(), is("FAILED")); 
  13.     assertThat(actualJobExitStatus.getExitDescription(), 
  14.       containsString("org.apache.http.conn.ConnectTimeoutException")); 

在這個測試用例中,在作業因 ConnectTimeoutException 而失敗之前,會嘗試對第一條記錄重試三次。

5. 使用XML配置重試

最后,讓我們看一下與上述配置等價的XML:

  1. <batch:job id="retryBatchJob"
  2.     <batch:step id="retryStep"
  3.         <batch:tasklet> 
  4.             <batch:chunk reader="itemReader" writer="itemWriter" 
  5.               processor="retryItemProcessor" commit-interval="10" 
  6.               retry-limit="3"
  7.                 <batch:retryable-exception-classes> 
  8.                     <batch:include class="org.apache.http.conn.ConnectTimeoutException"/> 
  9.                     <batch:include class="org.springframework.dao.DeadlockLoserDataAccessException"/> 
  10.                 </batch:retryable-exception-classes> 
  11.             </batch:chunk> 
  12.         </batch:tasklet> 
  13.     </batch:step> 
  14. </batch:job> 

6. 簡單總結

在本文中,我們學習了如何在Spring批處理中配置重試邏輯,其中包括使用Java和XML配置。以及使用單元測試來觀察重試在實踐中是如何工作的。

本文轉載自微信公眾號「鍋外的大佬」,可以通過以下二維碼關注。轉載本文請聯系鍋外的大佬公眾號。

 

責任編輯:武曉燕 來源: 鍋外的大佬
相關推薦

2022-08-02 20:47:38

Spring框架應用程序

2025-07-29 02:00:00

2023-08-22 08:01:42

SpringBatch事務管理

2025-08-04 09:33:42

2012-02-20 09:49:42

ibmdw

2017-01-12 14:50:15

大數據Spring Batc框架

2020-11-03 15:10:55

Spring Batc框架Java

2025-04-29 08:00:36

2025-08-05 01:45:00

2009-07-22 16:43:22

iBATIS框架iBATIS優化

2009-06-18 15:40:07

Spring Batc

2010-07-16 10:42:14

telnet批處理

2009-05-11 10:27:32

Spring Batc配置工作劃分

2009-07-24 16:42:46

iBatis框架做ba

2022-09-15 07:31:49

Spring攔截器注解

2023-11-27 07:44:59

RabbitMQ機制

2025-10-14 09:12:49

2024-05-29 09:20:41

2025-07-09 04:00:00

2022-03-01 14:55:39

數據庫Spring批處理
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区高清视频| 日韩精品久久| 狠狠综合久久av一区二区老牛| 亚洲国产欧美日韩另类综合| 国产精品久久久久久久久久免费| 国产性生活毛片| 一二三四区视频| 台湾佬综合网| 亚洲国产精品一区二区www在线 | 本网站久久精品| av在线不卡电影| 欧美成年人网站| www.夜夜爽| 极品美乳网红视频免费在线观看 | www.4hu95.com四虎| 尤物网在线观看| 天堂va蜜桃一区二区三区| 亚洲国产天堂久久综合网| 91.com在线| 亚洲成人中文字幕在线| 中文字幕亚洲综合久久五月天色无吗'' | 国产一区二区免费视频| 日韩在线高清视频| av中文字幕网址| 麻豆视频在线播放| 精品一区二区三区在线播放视频| 伊人青青综合网站| 性欧美videossex精品| 成人三级黄色免费网站| 丝袜美腿一区二区三区| 欧美肥老妇视频| 极品白嫩的小少妇| 久草在线资源站手机版| 91丨九色丨尤物| 国产成人精品视频在线观看| www..com.cn蕾丝视频在线观看免费版 | 色综合久久88| 97精品人人妻人人| 国产精品日本一区二区不卡视频 | 伊人色综合影院| 91丨九色丨丰满| 午夜精彩国产免费不卡不顿大片| 欧美大片国产精品| 欧美日韩二三区| 东热在线免费视频| 国产在线精品一区二区不卡了| 国产成人精品电影久久久| 国产在线观看免费av| 任你躁在线精品免费| 91国偷自产一区二区三区观看| 翔田千里亚洲一二三区| 99精品视频在线播放免费| 国内成人在线| 欧美日韩国产成人| 国产大学生自拍| 五月天亚洲色图| 亚洲国产中文字幕在线观看| 中文字幕在线国产| 福利欧美精品在线| 欧美日韩国产黄| 色播五月综合| av在线资源网| 国产精品视频在线看| 91久久精品www人人做人人爽 | 一区在线视频观看| 亚洲午夜激情免费视频| 91精产国品一二三产区别沈先生| 欧美理论电影| 久久久久久久综合狠狠综合| 成人写真视频福利网| 天天爽夜夜爽夜夜爽精品| 97精品一区| 精品亚洲国产视频| 亚洲av无码久久精品色欲| 免费日韩电影| 亚洲一区二区综合| 亚洲一卡二卡区| 四虎在线观看| 福利91精品一区二区三区| 国产精品久久久久久久9999 | 三级资源在线| 中文字幕不卡一区| 在线视频福利一区| 激情网站在线| 国产色产综合产在线视频 | 国产精品午夜av| 日韩精品极品在线观看| 一级黄色大片儿| 91av一区| 欧美一区二区视频在线观看2022 | 日韩av在线看| 亚洲一级片在线播放| 国产一区福利| 亚洲天堂av在线免费观看| a天堂视频在线观看| 国产99精品一区| 亚洲激情视频网站| 国产激情av在线| 激情视频一区| 日韩美女在线看| youjizz在线视频| 99在线精品免费视频九九视| 欧美激情videos| 少妇高潮av久久久久久| 国产一区二区三区日韩| 蜜桃av噜噜一区二区三| 亚洲 欧美 自拍偷拍| 丰满少妇久久久久久久| 欧美一区二区在线| 色视频在线观看| 91亚洲精品乱码久久久久久蜜桃| 岛国视频一区免费观看| www.国产三级| 国产不卡视频一区| 日韩欧美在线电影| av在线播放免费| 久久精品一区四区| 97免费视频观看| 日韩三区四区| 欧美日本韩国一区二区三区视频| 中文字幕在线综合| 一本久久青青| 中文字幕成人在线| 国产视频精品免费| 欧美激情1区2区| 国产精品久久久久久搜索| 永久免费无码av网站在线观看| 国产乱人伦精品一区二区在线观看| 91亚洲精品久久久久久久久久久久| 国产精品久久久久精| 国产乱码精品一区二区三| 日本午夜一区二区三区| 国产99在线| 欧美综合欧美视频| 涩涩网站在线看| re久久精品视频| xxx一区二区| 欧美一级做a爰片免费视频| 蜜臀久久久久久久| 91免费在线视频| 夜级特黄日本大片_在线| 91成人在线免费观看| 日本免费福利视频| 全球成人免费直播| 欧美另类极品videosbest最新版本| 久久久久亚洲视频| 国产一区二区美女| 性欧美18一19内谢| 欧洲在线视频| 日韩欧美成人午夜| 校园春色 亚洲| 国产精品一区二区在线观看网站 | 欧美影院午夜播放| 黄色片子免费看| 日韩精品免费一区二区夜夜嗨 | 最近中文字幕2019免费| 欧美黑人猛猛猛| 国产精品影视在线| 在线观看17c| 欧美xxxx做受欧美护士| 日韩视频在线永久播放| 亚洲熟妇无码av| 欧美777四色影| 亚洲xxxx在线| 91超碰在线| 欧美精品一二三| 无码人妻精品一区二区三区温州| 亚洲一区二区三区四区五区午夜| 成人亚洲欧美一区二区三区| 超碰公开在线| 91久久一区二区| 免费在线观看a视频| 日本免费新一区视频 | 台湾佬综合网| 国产精品久久久久免费a∨大胸| 日本在线天堂| 精品国产1区2区3区| 美女100%露胸无遮挡| 久草在线在线精品观看| 黄色网在线视频| 久久免费影院| 亚洲日韩欧美视频一区| wwwwww在线观看| 亚洲欧美一区二区三区久本道91 | 日韩天堂在线| 欧美肥婆姓交大片| 噜噜噜噜噜在线视频| 亚洲最大色网站| 四季av一区二区三区| 欧美日韩一区自拍| 成人在线国产精品| av成人福利| 日韩最新av在线| 天天摸夜夜添狠狠添婷婷| 一区二区三区中文在线| 午夜久久福利视频| 影音先锋一区| 亚洲一区二区在| 欧美调教网站| 91在线视频导航| 国产超碰精品| 久久久亚洲精品视频| 成 人 免费 黄 色| 色狠狠综合天天综合综合| 永久久久久久久| 国产一区二区三区四区五区美女| 国产91在线免费| 亚洲精品国产setv| 亚洲综合一区二区不卡| a在线免费观看| 亚洲欧美日韩国产中文| 亚洲成熟少妇视频在线观看| 久久综合av免费| 青青在线视频免费| 波多野结衣在线观看一区二区| 国产精品欧美激情| videos性欧美另类高清| 亚洲午夜色婷婷在线| 色婷婷av一区二区三| 欧美一区二区三区电影| 国模私拍一区二区| 午夜精品福利一区二区三区蜜桃| 性活交片大全免费看| 久久99精品国产.久久久久久| 超碰97人人射妻| 成人毛片免费看| 欧美动漫一区二区| 99久久婷婷国产综合精品首页 | 成人亚洲免费| 国产成人精品最新| 极品av在线| 97精品视频在线| 欧美精品久久久久久久久久丰满| 日韩免费看网站| 国产成人免费看一级大黄| 亚洲午夜激情网站| 黄色片在线观看网站| 国产精品初高中害羞小美女文| www.偷拍.com| 狠狠色综合色综合网络| 妺妺窝人体色777777| 香蕉久久精品| 久久久久资源| 日本久久二区| 国产精品久久视频| 国产精品亚洲成在人线| 国产精品美腿一区在线看| 欧洲成人一区| 欧美激情视频一区二区三区不卡| 国产丝袜在线| 日韩精品在线观看一区二区| 人妻一区二区三区| 欧美日韩国产另类不卡| 亚洲视频一区在线播放| 欧美日韩亚洲综合在线| 国产精品99精品| 亚洲国产精品自拍| 天堂网一区二区三区| 成人免费视频在线观看| 黄色免费看视频| 99天天综合性| 国产精品成人一区二区三区电影毛片| 精品一二三四在线| 亚欧精品在线视频| 成熟亚洲日本毛茸茸凸凹| 丝袜制服一区二区三区| 影音先锋中文字幕一区| 黄色一级视频片| 天堂va蜜桃一区二区三区 | 日韩中文字幕免费| 色呦呦视频在线观看| 97在线精品国自产拍中文| 日韩福利一区| 92看片淫黄大片欧美看国产片| 9l视频自拍蝌蚪9l视频成人| 茄子视频成人在线| 国产高清在线a视频大全 | 国产一区二区三区在线观看网站| 在线免费观看黄色网址| 欧美成人性色生活仑片| 瑟瑟视频在线看| 国产欧美日韩精品丝袜高跟鞋| 绿色成人影院| 国产精品亚洲综合天堂夜夜| 日韩欧美高清一区二区三区| 国产欧美一区二区三区在线| 日韩毛片在线| 3d动漫啪啪精品一区二区免费| 露出调教综合另类| 国产麻豆一区二区三区在线观看| 欧美黄色一级| 91精品免费| 亚洲精品小区久久久久久| 在线播放 亚洲| 国产日韩欧美三区| 天堂在线中文在线| 91一区在线观看| 中文字幕手机在线观看| 91精品办公室少妇高潮对白| av免费在线不卡| 亚洲最大中文字幕| 国产精品xx| 亚洲一区二区三区四区视频| 精品影片在线观看的网站| 国产欧美自拍视频| 欧美日韩视频| 午夜免费一区二区| 99在线视频精品| 久热这里有精品| 欧美三日本三级三级在线播放| 欧美视频在线观看一区二区三区| 中文字幕日韩欧美精品在线观看| 日本不卡网站| 国内不卡一区二区三区| 欧美69视频| 手机av在线网| 中文在线一区二区| 免费av网站在线| 欧美在线高清视频| 亚洲 小说区 图片区 都市| 欧美日韩福利电影| 日韩一区二区三免费高清在线观看| 免费影院在线观看一区| 亚洲第一毛片| 伊人久久久久久久久| 99在线精品免费| 久久视频免费看| 福利视频第一区| 中文字幕一区二区人妻痴汉电车 | 97在线精品国自产拍中文| 日韩精品视频中文字幕| 国产又粗又硬又长| 久久av资源网| 一级免费黄色录像| 欧美日韩一区二区三区在线 | 日本在线观看a| 99精品久久只有精品| 日本视频免费在线| 亚洲国产成人精品一区二区| 四虎在线免费看| 78色国产精品| 欧美激情三区| 视频一区二区综合| 免费观看日韩电影| 极品久久久久久久| 欧美三级视频在线观看| 高清在线观看av| 国产日韩av在线| 欧美激情欧美| 香蕉视频xxxx| 一区二区三区中文在线观看| 成人久久精品人妻一区二区三区| 国产亚洲一区二区精品| 快播电影网址老女人久久| 午夜久久资源| 国产在线视视频有精品| 日韩影院一区二区| 精品久久国产老人久久综合| 97视频在线观看网站| 国产精品专区一| 久久久五月天| 久久久久久香蕉| 国产99久久久精品| 亚洲一区欧美在线| 亚洲男人的天堂网站| 日韩欧美2区| 老司机午夜免费福利视频| 国产91露脸合集magnet| 欧美一级特黄视频| 在线观看欧美日韩| 麻豆国产一区二区三区四区| 91黄色在线看| 国产在线精品一区二区夜色| 久久亚洲精品大全| 日韩久久午夜影院| 久久麻豆视频| 国产在线播放观看| 久久久国产精品午夜一区ai换脸| 在线播放成人av| 久久男人的天堂| 精品国产一区一区二区三亚瑟| 欧美日韩精品区别| 午夜欧美一区二区三区在线播放| 国产一级网站视频在线| 3d精品h动漫啪啪一区二区| 欧美资源在线| 欧美色图亚洲激情| 欧美精品日韩精品| 国产无遮挡裸体视频在线观看| 亚洲精品一区二| 蜜桃视频在线一区| 久久精品99国产精| 欧美va亚洲va香蕉在线| 欧美大片1688| 欧美这里只有精品| 国产精品天天看| 日韩a在线观看| 96成人在线视频| 免费黄网站欧美| 国产精品男女视频|