在Spring Batch中配置重試邏輯 - Baeldung
預設情況下,Spring批處理作業因執行期間引發的任何錯誤而失敗。但是,有時,我們可能需要提高應用程式的彈性來處理間歇性故障。在本快速教程中,我們將探索如何在Spring Batch框架中配置重試邏輯。
假設我們有一個批處理作業,它讀取輸入的CSV檔案:
username, userid, transaction_date, transaction_amount sammy, 1234, 31/10/2015, 10000 john, 9999, 3/12/2015, 12321 |
然後,它透過點選REST端點以獲取使用者的age和postCode屬性來處理每條記錄:
public class RetryItemProcessor implements ItemProcessor<Transaction, Transaction> { @Override public Transaction process(Transaction transaction) throws IOException { log.info("RetryItemProcessor, attempting to process: {}", transaction); HttpResponse response = fetchMoreUserDetails(transaction.getUserId()); //parse user's age and postCode from response and update transaction ... return transaction; } ... } |
最後,它生成一個合併的輸出XML:
<transactionRecord> <transactionRecord> <amount>10000.0</amount> <transactionDate>2015-10-31T00:00:00+05:30</transactionDate> <userId>1234</userId> <username>sammy</username> <age>10</age> <postCode>430222</postCode> </transactionRecord> ... </transactionRecord> |
現在,如果由於某些網路緩慢而導致與REST端點的連線超時怎麼辦?如果是這樣,我們的批處理作業將失敗。
在這種情況下,我們希望重試失敗的專案兩次。因此,讓我們將批處理作業配置為在失敗的情況下最多執行三個重試:
@Bean public Step retryStep( ItemProcessor<Transaction, Transaction> processor, ItemWriter<Transaction> writer) throws ParseException { return stepBuilderFactory .get("retryStep") .<Transaction, Transaction>chunk(10) .reader(itemReader(inputCsv)) .processor(processor) .writer(writer) .faultTolerant() .retryLimit(3) .retry(ConnectTimeoutException.class) .retry(DeadlockLoserDataAccessException.class) .build(); } |
在這裡,我們呼叫faultTolerant() 以啟用重試功能。此外,我們使用retry和retryLimit分別定義了符合重試條件的異常和項的最大重試計數。
看一下上述配置的XML等效配置:
<batch:job id="retryBatchJob"> <batch:step id="retryStep"> <batch:tasklet> <batch:chunk reader="itemReader" writer="itemWriter" processor="retryItemProcessor" commit-interval="10" retry-limit="3"> <batch:retryable-exception-classes> <batch:include class="org.apache.http.conn.ConnectTimeoutException"/> <batch:include class="org.springframework.dao.DeadlockLoserDataAccessException"/> </batch:retryable-exception-classes> </batch:chunk> </batch:tasklet> </batch:step> </batch:job> |
相關文章
- 配置 Spring Batch 批處理失敗重試機制SpringBAT
- 基於Spring Batch的Spring Boot的教程 - BaeldungBATSpring Boot
- Spring Boot Reactor Netty配置 | BaeldungSpring BootReactNetty
- Spring Boot面試問題| BaeldungSpring Boot面試
- 在Spring Boot設定Swagger 2 - BaeldungSpring BootSwagger
- 【Spring】重構--手寫Spring核心邏輯(三)實現IOC/DI(context包)SpringContext
- 陪你解讀Spring Batch(一)Spring Batch介紹SpringBAT
- 在Linux中,如何使用LVM管理邏輯卷?LinuxLVM
- 在Docker容器內執行 vi 編輯器 | BaeldungDocker
- Spring Boot整合Spring BatchSpring BootBAT
- 陪你解讀Spring Batch(二)帶你入手Spring BatchSpringBAT
- Spring Boot中@Retryable重試教程Spring Boot
- Spring Batch 簡介SpringBAT
- 在Oracle中,什麼是物理讀和邏輯讀?Oracle
- 在LVM中恢復已刪除的邏輯卷LVM
- 經典示例-在快樂中鍛鍊程式邏輯
- 測試筆試邏輯思維題筆試
- SAP中匯率取值選擇邏輯分析測試
- Spring MVC的請求處理邏輯SpringMVC
- Spring YAML與屬性檔案配置檔案對比 | BaeldungSpringYAML
- 如何在YAML中為POJO中Map配置資料? | BaeldungYAMLPOJO
- 整合測試不是測試業務邏輯
- codeurjc/spring-mail-batch:使用Spring Batch批次傳送電子郵件SpringAIBAT
- Golang 單元測試 - 邏輯層Golang
- 《Spring Boot 實戰紀實》缺失的邏輯Spring Boot
- 在Docker中能使用資料庫嗎? | BaeldungDocker資料庫
- JS 中的邏輯運算子JS
- Python中的邏輯表示式Python
- 軟體測試的底層邏輯
- Spring Cloud Gateway WebFilter工廠 | BaeldungSpringCloudGatewayWebFilter
- SAP CRM Product Sales status在中介軟體中的處理邏輯
- 為啥同樣的邏輯在不同前端框架中效果不同前端框架
- unbound中快取時間邏輯快取
- Spring Boot 之 Spring Batch 批處理實踐Spring BootBAT
- Spring Retry重試機制Spring
- 邏輯題
- GraphQL SPQR和Spring Boot入門 | baeldungSpring Boot
- SAP WebClient UI配置決定(configuration)的邏輯介紹WebclientUI