在實際工做中,重處理是一個很是常見的場景,好比:發送消息失敗,調用遠程服務失敗,爭搶鎖失敗,等等,這些錯誤多是由於網絡波動形成的,等待事後重處理就能成功.一般來講,會用try/catch,while循環之類的語法來進行重處理,可是這樣的作法缺少統一性,而且不是很方便,要多寫不少代碼.然而
spring-retry
卻能夠經過註解,在不入侵原有業務邏輯代碼的方式下,優雅的實現重處理功能.java
使用@Retryable和@Recover實現重處理,以及重處理失後的回調git
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>
....其餘註解 @EnableRetry public class BaseApplication { ....... }
@Retryable(value={A異常.class,B異常.class}, maxAttempts=重試次數, backoff = @Backoff(value = 每次重試延遲毫秒數)) public Integer retry() { final int a = 5; int num = new SecureRandom().nextInt(); if (num % a == 0) { return num; } throw new RetryException("重試失敗"); }
@Recover public void recover(A異常 e) { // ... do something } @Recover public void recover(B異常 e) { // ... do something }
演示了單spring boot的應用的,在後續的cloud場景中,如:zuul,等組件,都會涉及到重處理,會在後續的章節中講解框架
想得到最快更新,請關注公衆號dom