重試支持Spring Retry

引入maven依賴
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.3.1.RELEASE</version>
</dependency>
添加@Retryable和@Recover注解
package com.test;

import org.springframework.remoting.RemoteAccessException;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;

@Service
public class TestService {

    @Retryable(value= {Exception.class},
    maxAttempts = 3,
    backoff = @Backoff(delay = 5000l,multiplier = 1))
    public void something() throws Exception {
        System.out.println("do something...");
        throw new Exception("調(diào)用異常");
    }

    @Recover
    public void recover(Exception e) {
        System.out.println(e.getMessage());
    }

}
  • @Retryable注解
    被注解的方法發(fā)生異常時(shí)會(huì)重試
    value:指定發(fā)生的異常進(jìn)行重試
    include:和value一樣,默認(rèn)空,當(dāng)exclude也為空時(shí),所有異常都重試
    exclude:指定異常不重試,默認(rèn)空,當(dāng)include也為空時(shí),所有異常都重試
    maxAttemps:重試次數(shù),默認(rèn)3
    backoff:重試補(bǔ)償機(jī)制,默認(rèn)沒有
  • @Backoff注解
    delay:指定延遲后重試
    multiplier:指定延遲的倍數(shù),比如delay=5000l,multiplier=2時(shí),第一次重試為5秒后,第二次為10秒,第三次為20秒
  • @Recover
    當(dāng)重試到達(dá)指定次數(shù)時(shí),被注解的方法將被回調(diào),可以在該方法中進(jìn)行日志處理。需要注意的是發(fā)生的異常和入?yún)㈩愋鸵恢聲r(shí)才會(huì)回調(diào)
SpringBoot啟動(dòng)測(cè)試
package com.test;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.retry.annotation.EnableRetry;

@SpringBootApplication
@EnableRetry
public class TestApplication {
    
    @Autowired
    private TestService testService;
    
    @RequestMapping("/test")
    public String test() {
        testService.something();
        return "200";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(TestApplication.class, args);
    }
    
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容