spring retry方法调用失败重试机制示例解析

 更新时间:2022年03月05日 16:26:38   作者:kl  
这篇文章主要为大家介绍了spring retry方法调用失败重试机制的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

前言

很多场景会用到重试的机制,比如:rpc服务调用失败重试,文件上传oss失败重试,http接口调用失败重试,支付回调失败重试等等,一切因为网络,非逻辑性错误等不确定因素引起的失败都可以加上重试的机制,来增强系统的健壮性,博主也处理过文件上传到第三方oss服务失败增加重试的事例,在这之前不知道spring有个spring-retry项目,所以采用的是限制次数的递归调用的方式来解决的。

现在我们来看看spring boot项目中怎么使用spring-retry来处理是失败重试的问题。

1.导入依赖

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

ps:不要遗漏spring-boot-starter-aop包

2.注解的使用

/**
     * @Retryable注解参数说明
     * maxAttempts 重试的次数
     * value 指定异常重试
     * exclude 排除某个异常不重试
     * 
     * @Backoff注解参数说明
     * backoff 重试的间隔时间
     */
    @Retryable(maxAttempts=9,exclude = ArrayIndexOutOfBoundsException.class,value=Exception.class,backoff=@Backoff(delay = 1000))
    public String getResult(String name){
        System.out.println("尝试调用第"+i+++"次");
        name= name.split(",")[1111];//异常测试
        if(i!=8){
            name= name.split(",")[1111];//异常测试
        }
        return name+":你好!";
    }

3.开启重试

@SpringBootApplication
@EnableRetry
public class BootRetryApplication {
	public static void main(String[] args) {
		SpringApplication.run(BootRetryApplication.class, args);
	}
}

ps:别忘了@EnableRetry注解开启重试

github项目地址:https://github.com/spring-projects/spring-retry

补充,手动声明式重试:

public static void main(String[] args) {
        ProxyFactory factory = new ProxyFactory(HelloService.class.getClassLoader());
        factory.setInterfaces(HelloService.class);
        factory.setTarget(new HelloService() {
            @Override
            public String say() {
                System.err.println("hello");
                if(1==1) throw new SecurityException();
                return "a";
            }
        });
        HelloService service = (HelloService) factory.getProxy();
        JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
        pointcut.setPatterns(".*say.*");
        RetryOperationsInterceptor interceptor = new RetryOperationsInterceptor();
        ((Advised) service).addAdvisor(new DefaultPointcutAdvisor(pointcut, interceptor));
        service.say();
    }

以上就是spring retry方法调用失败重试机制示例解析的详细内容,更多关于spring retry方法调用失败重试机制的资料请关注脚本之家其它相关文章!

相关文章

  • 基于spring 方法级缓存的多种实现

    基于spring 方法级缓存的多种实现

    下面小编就为大家带来一篇基于spring 方法级缓存的多种实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java中的this指针使用方法分享

    Java中的this指针使用方法分享

    我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。
    2014-06-06
  • Spring Boot 整合mybatis 与 swagger2

    Spring Boot 整合mybatis 与 swagger2

    之前使用springMVC+spring+mybatis,总是被一些繁琐的xml配置,还经常出错,下面把以前的一些ssm项目改成了spring boot + mybatis,相对于来说优点太明显了,具体内容详情大家通过本文学习吧
    2017-08-08
  • Java System类用法实战案例

    Java System类用法实战案例

    这篇文章主要介绍了Java System类用法,结合具体实例形式分析了java使用System类获取系统环境变量信息相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java Class 加密工具 ClassFinal详解

    Java Class 加密工具 ClassFinal详解

    ClassFinal 是一款 java class 文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译,这篇文章主要介绍了Java Class 加密工具 ClassFinal,需要的朋友可以参考下
    2023-03-03
  • Java SpringBoot @Async实现异步任务的流程分析

    Java SpringBoot @Async实现异步任务的流程分析

    这篇文章主要介绍了Java SpringBoot @Async实现异步任务,主要包括@Async 异步任务-无返回值,@Async 异步任务-有返回值,@Async + 自定义线程池的操作代码,需要的朋友可以参考下
    2022-12-12
  • java关键字super的骚操作详解

    java关键字super的骚操作详解

    关键字super在Java中用于引用当前类的父类(即超类)的构造方法、访问父类的成员变量和方法,它提供了一种方便的方式来处理继承关系中的父类操作,下面我们就来看看它有哪些骚操作吧
    2023-09-09
  • Java中字符编码格式详解

    Java中字符编码格式详解

    在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。本文主要给大家讲解java中字符的编码格式等相关问题
    2016-03-03
  • java数组元素的引用实例讲解

    java数组元素的引用实例讲解

    在本篇文章里小编给大家整理的是一篇关于java数组元素的引用实例讲解内容,有需要的朋友们可以学习参考下。
    2021-03-03
  • Java Float 保留小数位精度的实现

    Java Float 保留小数位精度的实现

    这篇文章主要介绍了Java Float 保留小数位精度的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论