springboot retry

配置

pom.xml配置

        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>

启动类增加注解@EnableRetry

retry测试类

@Service
@Slf4j
public class RetryService {

    @Retryable(value = {Exception.class}, maxAttempts = 3, backoff = @Backoff(value = 1000L))
    public JSONObject getResult(HttpServletRequest request) {
        log.info("start getResult");
        throw new RuntimeException("getResult error");
    }

    @Recover
    private JSONObject recover(Exception e) {
        log.error("recover error, e.getmessage:{}, e:{}", e.getMessage(), e);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("data", 123);
        return jsonObject;
    }
}

执行结果

2017-12-08 12:00:40.096  INFO 13945 --- [nio-8080-exec-1] c.i.learn.aspect.service.RetryService    : start getResult
2017-12-08 12:00:41.101  INFO 13945 --- [nio-8080-exec-1] c.i.learn.aspect.service.RetryService    : start getResult
2017-12-08 12:00:42.105  INFO 13945 --- [nio-8080-exec-1] c.i.learn.aspect.service.RetryService    : start getResult
2017-12-08 12:00:42.114 ERROR 13945 --- [nio-8080-exec-1] c.i.learn.aspect.service.RetryService    : recover error, e.getmessage:getResult error, e:{}

java.lang.RuntimeException: getResult error

会首先重试3此retry注解中的内容,三次都失败之后会执行recover,然后抛出异常。

    @Retryable(value={A异常.class,B异常.class}, maxAttempts=重试次数, backoff = @Backoff(value = 每次重试延迟毫秒数))
    public Integer retry() {
        LOGGER.info("测试retry");
        final int a = 5;
        int num = new SecureRandom().nextInt();
        if (num % a == 0) {
            return num;
        }
        throw new RetryException("重试失败");
    }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部