首页 > 其他分享 >spring-retry 重试机制

spring-retry 重试机制

时间:2023-12-29 15:26:37浏览次数:32  
标签:info retry RuntimeException spring 重试 Retry context retryCount

引用pom.xml

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

注:本人测试使用jdk8

例子:

public void demo(String str) throws Throwable {

        RetryTemplate build = RetryTemplate.builder().maxAttempts(10)//最大重试次数
                .exponentialBackoff(1000, 2, 3 * 1000)
                .retryOn(RuntimeException.class)//遇到RuntimeException触发重试
                .build();
        build.execute((RetryCallback<Object, Throwable>) context -> {
            //执行业务逻辑
            int retryCount = context.getRetryCount()+1;
            log.info(">>" + str + " Retry 触发时间:" + DateUtils.emptyFormat(new Date()) + ",触发次数:" + retryCount);
            //if (retryCount < 3) {
                log.info(">> Retry 抛出一下 RuntimeException");
                throw new RuntimeException("RuntimeException");
            //}
            //log.info(">> Retry 执行完毕");
            //return true;
        }, (RecoveryCallback<Object>) context -> {
            //当重试次数耗尽时 重试次数耗尽时触发,降级业务逻辑
            int retryCount = context.getRetryCount();
            log.info("Retry 重试次数耗尽时触发,降级业务逻辑.共重试次数" + retryCount);


            return null;
        });

    }public void demo(String str) throws Throwable {

        RetryTemplate build = RetryTemplate.builder().maxAttempts(10)//最大重试次数
                .exponentialBackoff(1000, 2, 3 * 1000)
                .retryOn(RuntimeException.class)//遇到RuntimeException触发重试
                .build();
        build.execute((RetryCallback<Object, Throwable>) context -> {
            //执行业务逻辑
            int retryCount = context.getRetryCount()+1;
            log.info(">>" + str + " Retry 触发时间:" + DateUtils.emptyFormat(new Date()) + ",触发次数:" + retryCount);
            //if (retryCount < 3) {
                log.info(">> Retry 抛出一下 RuntimeException");
                throw new RuntimeException("RuntimeException");
            //}
            //log.info(">> Retry 执行完毕");
            //return true;
        }, (RecoveryCallback<Object>) context -> {
            //当重试次数耗尽时 重试次数耗尽时触发,降级业务逻辑
            int retryCount = context.getRetryCount();
            log.info("Retry 重试次数耗尽时触发,降级业务逻辑.共重试次数" + retryCount);


            return null;
        });

    }

 

执行结果:

 

参考文档:
https://github.com/spring-projects/spring-retry
exponentialBackoff(1000, 2, 3 * 1000) 参数含义:

 

标签:info,retry,RuntimeException,spring,重试,Retry,context,retryCount
From: https://www.cnblogs.com/lxn0216/p/17934925.html

相关文章

  • springboot(功能权限分配和脚本实现功能分配)
    一、功能权限分配添加菜单按钮:这时的按钮菜单是手动添加,后面可以自动生成 进入到角色管理,修改普通角色,添加权限之后,登录普通角色,在这之前需要先重置一下普通角色的密码 登录普通角色,普通角色就可以拥有权限,进行一系列操作: 二、脚本功能权限分配运行代码生成器的facor......
  • spring ioc总结
    bean的注入方式:1.xml配置,然后代码里获取容器获取bean2.xml配置,然后用注解注入bean的对象属性注入方式:xml:setter方法注入(普通属性注入:名称)(普通属性集合注入:名称)(引用属性集合注入:引用外部bean,引用内部bean)......
  • 基于SpringBoot的宠物管理系统的设计与实现(可做毕业设计参考)
    关键词:SpringBoot;宠物管理;宠物医院;宠物店管理;毕业;我们专注于软件开发工程领域,熟练掌握多种开发技术,包括基于SpringBoot、Vue.js、SSM框架的应用开发,以及针对AndroidAPP和微信小程序的开发。需要程序可以ADDME添+my企鹅numberisonezerothreetwothreesevenonetwoone回头......
  • Spring Cloud工程项目管理系统源码,支持多端展示
    智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最线实现项目对人、机、料、法、环的全方位实时监控。支持多端展示(大屏、PC端、手机端、平板端)。......
  • 「Java开发指南」如何用MyEclipse搭建JSF/Primefaces和Spring(二)
    本教程将引导大家完成为JavaServerFaces(JSF)生成软件组件的过程,在本文中您将学习到如何:从数据库表到现有项目搭建配置支持JSF2.0的服务器部署搭建的应用程序在上文中,我们介绍了如何创建一个Web项目、从数据库表搭建及配置服务器等,本文将继续介绍如何部署应用程序!更多MyE......
  • SpringBoot中读取yml中配置的list对象的配置项
    场景SpringBoot中通过ConfigurationProperties注解的方式读取application.yml中配置的属性值:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108385148参考上面获取yml配置文件中简单的配置项的方式。如果需要获取application.yml中配置的list数据,且每个list有多......
  • SpringMVC集成pageofficeV6最简单步骤
    转载:PageOffice最简单的集成代码(SpringMVC)#PageOffice最简单的集成代码(SpringMVC)本文描述了PageOffice产品在SpringMVC项目中如何集成调用。新建SpringMVC项目:pageoffice6-springmvc-simple在您项目的pom.xml中通过下面的代码引入PageOffice依赖。pageoffice.jar已发布到......
  • Spring Boot 2.x 到 3.2 的全面升级指南
    SpringFramework是一种流行的开源企业级框架,用于创建在JavaVirtualMachine(JVM)上运行的独立、生产级应用程序。而SpringBoot是一个工具,可以让使用Spring框架更快、更轻松地开发Web应用程序和微服务。随着SpringBoot的不断发展,开发人员必须跟上最新的升级和变化。......
  • Spring Boot邮件发送教程:步步为营,轻松实现图片附件邮件!
     通过SpringBoot构建一个功能强大的邮件发送应用程序,重点是实现发送包含图片附件的邮件。我将逐步介绍添加必要的依赖、创建邮件服务类和控制器的步骤,并提供了具体的示例源代码。跟随这个简单而清晰的教程,您将能够轻松地集成邮件发送功能到您的SpringBoot应用中。步骤1:......
  • 23年底,我出齐了Spring boot,Spring cloud和案例方面的书,正在写一本面试书(代年终总结)
    年末了,再来总结一下吧,希望本人明年的年终总结文还能在博客园发。这次总结的主题是本人出的java书。这几年本人出了不少书,其中有python、redis和Java方面的。姑且不说其它,java方面,本人出了springboot,springcloud(第一代),springcloudalibaba(第二代)和基于springboot+vue.js的全......