探索Springspring

Spring Retry使用说明

2019-09-27  本文已影响0人  Real_man

Spring Retry提供了操作重试的功能,在网络不稳定的情况下,重试功能是比较重要的必备项。Spring Retry可以让我们自定义重试策略,回退策略,重试状态处理。

使用

1 添加依赖,默认情况下在Spring Boot中有依赖项。

       
       <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
          <!--  <version>1.1.5.RELEASE</version>  -->
        </dependency>

          <!--  Spring Retry使用了AOP -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.2</version>
        </dependency>

2 配置RetryTemplate,重试策略,回退策略。或者监听器

   @Bean
    public RetryTemplate retryTemplate() {
        RetryTemplate retryTemplate = new RetryTemplate();

        // 每次回退固定的时间
//        FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
//        fixedBackOffPolicy.setBackOffPeriod(2000l);

        // 指数回退,第一次回退0.2s,第二次回退0.4s
        ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
        exponentialBackOffPolicy.setInitialInterval(200L);
        exponentialBackOffPolicy.setMultiplier(2);
        retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);

        // 重试策略,有多种重试策略
        SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
        retryPolicy.setMaxAttempts(3);
        retryTemplate.setRetryPolicy(retryPolicy);

        retryTemplate.setThrowLastExceptionOnExhausted(false);

        return retryTemplate;
    }

3 使用重试功能

     retryTemplate.execute((RetryCallback<Void, RuntimeException>) context -> {
            // 这里写我们的业务代码
            // ....
        
            // 模拟抛出异常
            throw new RuntimeException("异常");
        });

4 可以开启日志查看效果

logging.level.org.springframework.retry=debug
1569552787010

注解

注意

Spring Retry有一个缺点,其回退策略,默认使用的是Thread.sleep方法,会导致当前的线程被阻塞,因此使用的时候要注意。

最后

简单说明了下Spring Retry的使用方式,使用简单,功能强大。

参考:https://www.baeldung.com/spring-retry

上一篇下一篇

猜你喜欢

热点阅读