SpringBoot 失败重试机制

1.pom依赖

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

2.在在主启动类或者需要重试的方法所在的类上添加注解@EnableRetry

@EnableRetry

3.使用(在所需要重试的方法上加上一下注解)

/**
     * recover:  当前类中的回滚方法名称;
     * interceptor: 重试的拦截器名称,重试的时候可以配置一个拦截器;
     * value:需要重试的异常类型,跟下面的 include 一致;
     * include:包含的重试的异常类型;
     * exclude:不包含的重试异常类型;
     * label:用于统计的唯一标识;
     * stateful:标志表示重试是有状态的,也就是说,异常被重新抛出,重试策略是否会以相同的策略应用于具有相同参数的后续调用。如果是false,那么可重试的异常就不会被重新抛出。
     * maxAttempts:重试次数;
     * backoff:指定用于重试此操作的属性;
     * listeners:重试监听器bean 名称;
     * @Backoff(delay = 1000, multiplier = 2) 表示第一次延迟 1000ms 重试,后面每次重试的延迟时间都翻倍。
     * @return
     */
    @GetMapping("/sayHello")
    @Retryable(value = Exception.class, recover = "recover",maxAttempts = 2,
            backoff = @Backoff(delay = 1000, multiplier = 2))
    public String sayHello(){
    
    
        System.out.println("开始通知下游系统");
        System.out.println("通知下游系统");
        String name = abc();
        System.out.println("执行完成!!");
        return "";
    }

    public String abc(){
    
    
        try {
    
    
            System.out.println("abc");
            int i =1 /0;
        } catch (Exception e) {
    
    
            throw new RuntimeException("abc通知下游系统异常");
        }
        return "";
    }
      @Recover
    public void recover() {
    
    
        System.out.println("recover");
    }

备注:

# aop配置
<aop:aspectj-autoproxy proxy-target-class="true"/>
# spring中重试需要定义此Bean
<bean id="retryConfiguration" class="org.springframework.retry.annotation.RetryConfiguration"></bean>

猜你喜欢

转载自blog.csdn.net/SmileSunshines/article/details/130208672