`

spring boot 重试

 
阅读更多
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>



import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.remoting.RemoteAccessException;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.retry.annotation.Retryable;

@Configuration
@EnableRetry
public class Application {



}


import java.time.LocalTime;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.remoting.RemoteAccessException;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;

@Service
public class RemoteService {
    
    private final static Logger logger = LoggerFactory.getLogger(RemoteService.class);
    
    @Retryable(value = { RemoteAccessException.class }, maxAttempts = 3, backoff = @Backoff(delay = 5000l, multiplier = 1))
    public int call() throws Exception {
        logger.info(LocalTime.now()+" do something...");
//        throw new RemoteAccessException("RPC调用异常");
        throw new RuntimeException("run errer");
    }

    @Recover
    public int recover(RemoteAccessException e) {
        logger.info("================10=========================="+e.getMessage());

        return 10;
    }

    @Recover
    public int recover(RuntimeException e) {
        logger.info("============12=============================="+e.getMessage());
        return 12;
    }

    @Recover
    public int recover(Exception e) {
        logger.info("============11=============================="+e.getMessage());
        return 11;
    }
}




@Retryable注解
被注解的方法发生异常时会重试
value:指定发生的异常进行重试
include:和value一样,默认空,当exclude也为空时,所有异常都重试
exclude:指定异常不重试,默认空,当include也为空时,所有异常都重试
maxAttemps:重试次数,默认3
backoff:重试补偿机制,默认没有

@Backoff注解
delay:指定延迟后重试
multiplier:指定延迟的倍数,比如delay=5000l,multiplier=2时,第一次重试为5秒后,第二次为10秒,第三次为20秒

@Recover
当重试到达指定次数时,被注解的方法将被回调,可以在该方法中进行日志处理。需要注意的是发生的异常和入参类型一致时才会回调
分享到:
评论

相关推荐

    Spring Boot 注解解决重试问题

    Spring Boot 注解 重试

    Spring Boot 2.X、Spring Cloud、Spring Cloud Alibaba、Dubbo、分布式.zip

    在带你快速学会 MQ 消息的发送与消费的同时,我还想告诉你 MQ 还有集群消费、广播消费、顺序消息、定时消息、事务消息、消费重试等等特性。 在带你快速学会 Job 任务的编写的同时,我还想告诉你还有 Quartz 单体、...

    Spring Boot中使用Swagger2构建强大的RESTful API文档

    为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又...

    Spring boot使用spring retry重试机制的方法示例

    主要介绍了Spring boot使用spring retry重试机制的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    基于 Spring Boot 2.X 版本的深度入门教程

    快速学会 MQ 消息的发送与消费的同时,我还想告诉你 MQ 还有集群消费、广播消费、顺序消息、定时消息、事务消息、消费重试等等特性。快速学会 Job 任务的编写的同时,我还想告诉你还有 Quartz 单体、Quartz 集群、...

    spring-boot-rabbitmq-demo.zip

    spring boot和rabbitMQ最佳实践 1、JSON序列化与反序列化 要实现消息跨平台,需要配置消息JSON序列化(配置见代码实现),就可以实现不同语言之间互相发送/接收消息,还可以直接用RabbitMQ控制台发送消息。 2、...

    Spring Boot 配置MySQL数据库重连的操作方法

    主要介绍了Spring Boot 配置MySQL数据库重连的操作方法,需要的朋友可以参考下

    重试框架spring-retry以及guava-retry的使用

    压缩包包含着springboot项目retry,项目中演示了使用spring-retry传统的方式以及注解的方式使用重试的案例,也有guava-retry的使用案例,以及两者的区别

    基于Spring Boot构建的HTTP请求日志记录和重试补偿工具(95分以上课程大作业).zip

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...

    Spring-Boot的Dubboxboot-dubbo.zip

    Boot-dubbo 项目整合了最新的 Spring Boot 和功能强大的 RPC 框架 Dubbox,两者都有优点,也都有缺点,最新版本的 Spring Boot 包含了 Metrics 模块Dubbox官方地址:Dubbox:... 1、微内核2、配置简单3、模块化4、开...

    spring-boot-sample-app:从我的github.com上的spring boot archtype生成的示例应用程序

    Spring Boot 2示例应用程序...弹簧重试和断路器,用于外部服务呼叫 REST API模型验证 用于GIT REPO上外部配置的Spring Cloud配置 Cucumber和Spring Boot测试以进行集成测试 詹金斯管道用于多分支项目 具有Sonar检查和发

    springboot基于spring-retry实现重试机制

    适用于支付回调,多系统之间(需要自定义重试的场景)

    SpringBoot 服务调用异常重试补偿处理

    demo02 无法访问 重试机制 超时、无法访问执行补偿操作 ----------------------------- 操作1. 传入的参数为demo02的sleep时间, demo01的请求超时时间为1秒, 这时候demo01出现超时异常, 直接进入补偿处理 操作2...

    spring-cloud-examples

    spring-cloud-zuul:Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断 重试 spring-cloud-sleuth-zipkin: 利用Sleuth、Zipkin对Spring Cloud应用进行服务追踪分析 spring-boot-admin-eureka: 使用Spring Boot Admin ...

    springcloud微服务框架+服务模版

    spring-cloud-zuul:Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断 重试 spring-cloud-sleuth-zipkin: 利用Sleuth、Zipkin对Spring Cloud应用进行服务追踪分析 spring-boot-admin-eureka: 使用Spring Boot Admin ...

    05丨HTTP调用:你考虑到超时、重试、并发了吗?

    其次,考虑到网络的不稳定,超时后的请求重试是一个不错的选择,但需要考虑服务端接口的幂等性设计是否允许我们重试;最后,需要考虑框架是否会像浏览器那样限制并发连接数,以免在服务并发很大的情况下,HTTP 调用...

    spring-cloud使用的各种示例

    - [spring-cloud-zuul](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-cloud-zuul):Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断 重试 - [spring-cloud-sleuth-zipkin]...

    springboot整合shiro登录失败次数限制功能的实现代码

    主要介绍了springboot整合shiro-登录失败次数限制功能,实现此功能如果是防止坏人多次尝试,破解密码的情况,所以要限制用户登录尝试次数,需要的朋友可以参考下

    Spring Boot RabbitMQ 延迟消息实现完整版示例

    本篇文章主要介绍了Spring Boot RabbitMQ 延迟消息实现完整版示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    retrofit-spring-boot-demo:改造弹簧引导演示

    retrofit-sample 演示 通过retrofit-starter搭建的环境调用 User服务的添删改查以及上传,以及retrofit-starter的诸多特性,例如: 自定义注入OkHttpClient 注解式拦截器 连接池管理 日志打印 请求重试 错误解码器 ...

Global site tag (gtag.js) - Google Analytics