精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费观看久久久久| 乱子伦一区二区三区| 日韩视频一区二区三区四区| 亚洲老司机在线| 国产在线精品一区二区三区》| 国产精品成人久久| 国产欧美一区二区三区精品观看 | 精品一区二区三区免费| 九色成人免费视频| 30一40一50老女人毛片| 激情久久99| 亚洲伊人色欲综合网| 久久免费看av| 国产免费一区二区三区最新不卡 | 久久久久国产精品免费免费搜索| 国产精品视频yy9099| 久草视频免费在线播放| 中文字幕伦av一区二区邻居| 337p亚洲精品色噜噜狠狠| 国产精品入口芒果| 日本在线观看视频| 99国产精品久| 亚洲一区国产精品| 国产性生活视频| 国产精品sm| 中文字幕亚洲国产| 精品一区二区三区四区五区六区| 国精产品一区二区三区有限公司 | 成人影院网站| 亚洲卡通动漫在线| 日本在线播放不卡| 后进极品白嫩翘臀在线视频| 久久精品国产亚洲高清剧情介绍| 97超碰国产精品女人人人爽| 亚洲怡红院在线观看| 日韩高清影视在线观看| 日韩午夜av一区| 伊人国产在线视频| 欧美第一视频| 午夜视频在线观看一区二区| 色中文字幕在线观看| 国内精品在线视频| 91片在线免费观看| 国产经典一区二区三区| 国产精品人人爽| 老司机午夜免费精品视频| 久久久综合av| 国产盗摄x88av| 久久久影院免费| 亚洲色图17p| 天堂久久久久久| 大桥未久女教师av一区二区| 欧美一区二区三区在线看| 亚洲一级片免费| 日韩电影免费看| 午夜电影久久久| 国产在线视频在线| 在线xxxx| 伊人色综合久久天天| 三年中文高清在线观看第6集 | 8848成人影院| 日韩欧美国产麻豆| 国产老头和老头xxxx×| 麻豆精品久久| 91精品国产免费久久综合| 99精品999| 麻豆国产一区二区三区四区| 欧美一级精品在线| 一卡二卡三卡四卡五卡| 日韩一级淫片| 亚洲精品一区二区精华| 在线播放av网址| 日本欧美高清| 亚洲欧美成人在线| 国产综合精品在线| 99精品网站| 欧美大胆在线视频| 动漫精品一区一码二码三码四码| 影音先锋一区| 热久久99这里有精品| 波多野结衣绝顶大高潮| 青青青伊人色综合久久| 91久久精品国产91性色| www.桃色av嫩草.com| 成人激情黄色小说| 久久久影院一区二区三区| 触手亚洲一区二区三区| 中文字幕一区在线| 免费的一级黄色片| 乡村艳史在线观看| 欧洲一区二区三区免费视频| 亚洲男人天堂av在线| 亚洲成人五区| 亚洲黄色片网站| 无码少妇一区二区| 中文精品久久| 69av成年福利视频| 中文字幕男人天堂| 国产精品一二二区| 久久精品99久久| 色开心亚洲综合| 亚欧色一区w666天堂| 五月婷婷狠狠操| 深夜激情久久| 亚洲人成亚洲人成在线观看| 久久国产美女视频| 新狼窝色av性久久久久久| 国产精品一区二区久久精品| 黄色三级网站在线观看| 欧美国产一区二区在线观看| 特级西西人体www高清大胆| 在线天堂资源| 91精品国产乱| 一级黄色录像毛片| 亚洲国产午夜| 91九色精品视频| 免费成人av电影| 樱桃国产成人精品视频| 999在线免费视频| 99久久人爽人人添人人澡| 亚洲无亚洲人成网站77777| 麻豆精品一区二区三区视频| 日韩和欧美一区二区| 国产手机精品在线| 操你啦视频在线| 欧美亚州韩日在线看免费版国语版| 国产伦理在线观看| 日韩欧美精品| 欧美中文字幕在线| 韩国av永久免费| 亚洲欧洲韩国日本视频| aa免费在线观看| 白白在线精品| 欧美久久久精品| 中文字幕av影视| 91蝌蚪国产九色| 日韩精品一区二区三区四 | 91久色国产| 91caoporm在线视频| 黑人巨大精品欧美一区二区免费 | 日韩久久99| 亚洲人成人99网站| 免费观看成人毛片| 成人国产亚洲欧美成人综合网| 成人手机视频在线| 免费成人高清在线视频| 亚洲欧美制服丝袜| 国产性猛交╳xxx乱大交| 成人av在线一区二区三区| 国产高潮呻吟久久久| 日本国产欧美| 国产亚洲日本欧美韩国| 日韩精品久久久久久免费| 白白色 亚洲乱淫| 欧美高清中文字幕| 91欧美极品| 久久91亚洲精品中文字幕| 国产精品欧美激情在线| 日韩美女精品在线| www.色.com| 欧美日韩国产色综合一二三四| 91麻豆国产精品| a黄色片在线观看| 欧美一区二区三区在线观看 | 天天躁日日躁狠狠躁伊人| 亚洲成a人v欧美综合天堂 | 欧美国产日产图区| 五月天亚洲视频| 久久综合av| 亚洲mm色国产网站| 国产www视频在线观看| 亚洲第一网站免费视频| 亚洲黄色小说图片| 久久九九国产精品| 色www免费视频| 1024精品久久久久久久久| 亚洲综合色av| 波多一区二区| 亚洲精品一区二区三区不| 日韩av大片在线观看| 国产欧美一区二区在线观看| 青青青在线视频免费观看| 欧美电影免费观看高清| 91丨九色丨国产在线| 人妖欧美1区| 亚洲精品福利免费在线观看| 神马久久久久久久| 中文字幕一区二| 在线播放av网址| 天堂在线亚洲视频| 99久久久无码国产精品性色戒| 日本一区二区三区播放| 69久久夜色精品国产69| 成人福利在线| 欧美成人午夜电影| 亚洲熟女综合色一区二区三区| 中文无字幕一区二区三区 | 99国产精品99久久久久久| 日日碰狠狠躁久久躁婷婷| 97精品国产| 精品一区二区三区视频日产| jizz亚洲女人高潮大叫| 欧美高跟鞋交xxxxxhd| 欧美女v视频| 欧美一区二区成人| 久久精品无码av| 亚洲美女视频一区| 伊人网在线视频观看| 国产精品一区二区果冻传媒| 国产成人a亚洲精v品无码| 久久综合电影| 久久国产精品 国产精品| 欧美视频精品| 2020国产精品视频| 羞羞视频在线观看不卡| 亚洲视频999| 国精产品乱码一区一区三区四区| 欧美日韩三级在线| 日本午夜小视频| 最新成人av在线| 蜜桃传媒一区二区亚洲av| 国产成人精品免费一区二区| 激情视频综合网| 影音先锋亚洲电影| 午夜啪啪福利视频| 欧美一二区在线观看| 精品国产免费久久久久久尖叫| 高清久久精品| 国产日韩欧美夫妻视频在线观看| 美女搞黄视频在线观看| 久久97精品久久久久久久不卡| 国产成人天天5g影院在线观看 | 精品亚洲综合| 亚洲国产成人精品电影| av高清一区二区| 欧美日韩不卡在线| 99成人精品视频| 欧美性猛交xxxx乱大交| 在线免费观看毛片| 一区二区三区在线视频播放| 天堂网av2018| 国产精品区一区二区三| 日韩人妻无码一区二区三区| av网站一区二区三区| 99免费观看视频| 国产东北露脸精品视频| 图片区乱熟图片区亚洲| 男女性色大片免费观看一区二区| www.四虎成人| 久久大逼视频| 黄色片一级视频| 美女视频一区免费观看| 亚洲中文字幕无码中文字| 亚洲黄色成人| 国产素人在线观看| 日韩午夜高潮| 男人和女人啪啪网站| 亚洲经典在线| 国产乱子伦农村叉叉叉| 最新日韩av| 欧美 日韩 激情| 久久精选视频| 国产精品无码一本二本三本色| 三级成人在线视频| 日韩一级理论片| 蜜乳av一区二区| 久久久久xxxx| 国产sm精品调教视频网站| 中国免费黄色片| 99精品在线免费| 亚洲天堂视频一区| 欧美国产欧美综合| 麻豆天美蜜桃91| 亚洲国产精品人人做人人爽| 国产成人愉拍精品久久| 欧美日韩亚洲91| 国产精品熟女视频| 欧美福利一区二区| 成人爽a毛片一区二区| 日韩成人小视频| 91大神在线网站| 欧美成人h版在线观看| 91桃色在线| 国产脚交av在线一区二区| 日本午夜免费一区二区| 999精品在线观看| 秋霞综合在线视频| 日产国产精品精品a∨| 国产精品国产一区| 成年人网站国产| 日欧美一区二区| 手机在线观看日韩av| 91在线视频播放地址| 一区二区三区在线播放视频| 一区二区三区在线看| 日韩欧美在线观看免费| 欧美日韩大陆在线| 日本黄色三级视频| 一本一道久久a久久精品逆3p| h片在线观看网站| 日本一区二区在线免费播放| 国产精品va视频| 免费在线观看91| 中文字幕一区二区三三| 99精品免费在线观看| 国产高清精品在线| 非洲一级黄色片| 亚洲高清免费视频| 国产又大又黑又粗| 亚洲欧美日韩一区二区三区在线| 久久日韩视频| 国产精品av电影| 欧美三级午夜理伦三级在线观看| 天天综合中文字幕| 媚黑女一区二区| 欧美激情一区二区三区p站| 中文字幕精品—区二区四季| 精品无码人妻一区二区三区品| 欧美主播一区二区三区美女| 视频一区二区免费| 久久国产精彩视频| 久久69成人| 日本最新一区二区三区视频观看| 99综合精品| 国产精品99精品无码视亚| 国产精品黄色在线观看| 免费看毛片网站| 亚洲精品电影网| 另类视频在线| 99理论电影网| 欧美88av| 国产不卡的av| 中文字幕综合网| 在线亚洲欧美日韩| 一区二区欧美激情| 久久91导航| 欧美亚洲精品日韩| 先锋影音久久久| 国产男女猛烈无遮挡a片漫画| 亚洲午夜电影在线观看| 亚洲精品久久久久久无码色欲四季| 久久精品电影一区二区| 涩涩涩久久久成人精品| 亚洲一区二区免费视频软件合集| 日韩不卡一区二区三区| 舐め犯し波多野结衣在线观看| 欧美性猛交xxxx久久久| 青青草观看免费视频在线| 欧美影院久久久| 午夜先锋成人动漫在线| 午夜肉伦伦影院| 国产日韩欧美制服另类| 中文精品久久久久人妻不卡| 亚洲欧美制服中文字幕| 波多视频一区| 日韩免费中文专区| 免费看欧美女人艹b| www.xx日本| 欧美一区二区三区视频| 国产在线一区二区视频| 国产精品福利在线| 伊人久久影院| 日韩xxxx视频| 91最新地址在线播放| 一区二区三区视频免费看| 亚洲精品小视频在线观看| 麻豆免费在线| 国产成人av一区二区三区| 精品福利电影| 加勒比精品视频| 色国产精品一区在线观看| 男生女生差差差的视频在线观看| 国产精品老女人精品视频| 日韩精品免费| 青娱乐国产精品视频| 一区二区三区欧美在线观看| 91麻豆成人精品国产免费网站| 欧美精品一区三区| 国产福利一区二区精品秒拍| 国产美女三级视频| 国产亚洲人成网站| 国产精品久久久久久久久久久久久久久久 | 欧美一区 二区 三区| 日本一区视频在线播放| 理论电影国产精品| 一区视频免费观看| 日韩经典中文字幕| 亚洲第一会所| 男人草女人视频| 91美女片黄在线| 欧美成人一区二区三区四区| 久久在线精品视频| 国产精品传媒| 中文字幕第100页| 亚洲精品日韩一| 青青免费在线视频| 国产在线精品播放| 国产日韩亚洲| 国产成人在线网址| 亚洲精品xxx|