首页 > 其他分享 >Spring Retry使用小结

Spring Retry使用小结

时间:2023-12-21 16:34:27浏览次数:35  
标签:Retry spring boot springframework retry Spring org import 小结

目录

1、背景

日常开发中经常会下发接口回调通知失败、远程调用失败等等,这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。

2、使用步骤

2.1、pom.xml中引入相关依赖

引入spring-retryspring-aspects依赖的最新版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cnblogs.javalouvre</groupId>
    <artifactId>spring-retry-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-retry-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.2、启用@Retryable

package com.cnblogs.javalouvre.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.retry.annotation.EnableRetry;

@Configuration
@EnableRetry
public class AppConfig {
}

2.3、在响应方法上加上注解

package com.cnblogs.javalouvre.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
public class IndexService {

    private static final Logger log = LoggerFactory.getLogger(IndexService.class);

    /**
     * @Retryable注解标注,则发生对应错误,进行重试处理。
     *
     * 注解参数说明:
     *  1、retryFor 针对指定异常,进行重试处理
     *  2、backoff 重试策略
     *    2.1、delay 发起下次重试前时间间隔(单位:毫秒)
     *    2.2、multiplier 若此参数大于零,则重试时间间隔delay须乘于multiplier
     *  3、recover 指定重试次数用完后依然失败的处理句柄
     *  4、maxAttempts 最多尝试次数,默认3次
     */
    @Retryable(retryFor = Exception.class, backoff = @Backoff(delay = 5000L, multiplier = 1.5D), recover = "recoverDiv")
    public double div(int x, int y) {
        log.info("执行时间: {}", LocalDateTime.now());

        return x / y;
    }

    /**
     * 重试次数用完后续处理
     *
     * 对于@Recover注解的方法,须注意一下事项
     *  1、方法的返回值必须与@Retryable方法一致
     *  2、方法的第一个参数,必须是Throwable类型的,建议是与@Retryable配置的异常一致,其他的参数,需要哪个参数,写进去就可以了(@Recover方法中有的)
     *  3、该回调方法与重试方法写在同一个实现类里面
     */
    @Recover
    private double recoverDiv(Exception e, int x, int y) {
        log.info("异常 => {}", e.getMessage());

        return 0D;
    }
}

标签:Retry,spring,boot,springframework,retry,Spring,org,import,小结
From: https://www.cnblogs.com/javalouvre/p/17919367.html

相关文章

  • Spring Validation使用小结
    目录1、背景2、常用注解2.1、BeanValidation2.0注解2.1.1、校验空值2.1.2、校验大小2.1.3、校验布尔值2.1.4、校验日期和时间2.1.5、正则表达式2.1.5.1、验证IP地址2.1.5.1、验证手机号码3、使用3.1、当方法入参为@PathVariable、@RequestParam注解的简单参数时,需要在Cont......
  • Spring框架的事务管理
    引言事务管理是企业应用程序中不可或缺的一个方面,它确保数据的一致性和完整性。Spring框架提供了一个灵活的事务管理抽象,它可以透明地工作在不同的事务管理API之上。事务管理的基本概念在深入Spring的事务管理之前,让我们回顾几个关键概念:事务(Transaction):一系列的动作,它们被视为一个......
  • 抢先看!Salesforce Spring '24中的10个亮点功能!
    Spring'24来临在即,PreviewOrgs已上线。在Spring'24中,将会为管理员、开发人员和顾问带来更多新功能。在这片云计算的海洋里,一些亮点功能总能在Salesforce生态系统中引起强烈反响。本篇文章为学习者们盘点了Spring'24中的10个亮点功能,一起来先睹为快!Spring'24发布的具体日期......
  • SpringBoot集成Memcached实现高效缓存
    一、前言Memcached是一款高性能的分布式内存对象缓存系统,可以用来缓存SQL查询结果、API调试结果等。使用Memcached可以减少对数据库的查询次数,提高系统性能。它主要用于减轻数据库负载,提供应用系统,减少数据库压力。SpringBoot可以快速集成Memcached实现对缓存到读写操作。二、安装......
  • SpringBoot整合Dubbo常用注解类说明
    SpringBoot与Dubbo的整合pom依赖:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.spr......
  • Spring Boot —— Caffeine(内存缓存器)
    项目中需要用一个替代concurrenthashmap能够帮忙过期或者防止一直putoom所以使用 优点内存管理优化Caffeine使用了一种基于堆外内存的存储模型,通过直接内存访问,避免了Java堆内存的垃圾回收开销。这种内存管理优化可以减少垃圾回收对应用性能的影响,提供更高的缓存读写性能......
  • Spring Boot原理分析 | SpringApplication、Yaml、Properties
    ......
  • 如何用MyEclipse搭建JSF/Primefaces和Spring(一)
    本教程将引导大家完成为JavaServerFaces(JSF)生成软件组件的过程,在本文中您将学习到如何:从数据库表到现有项目搭建配置支持JSF2.0的服务器部署搭建的应用程序自定义Spring代码生成需要MyEclipse Spring或Bling授权。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群......
  • Spring Boot 3.2 + CRaC = 王炸!
    原文:https://foojay.io/today/springboot-3-2-crac/前段时间发布了Spring6.1和SpringBoot3.2,它们都完全支持CRaC(检查点协调恢复)。如果你想了解有关CRaC的更多信息,请随时阅读此处:https://docs.azul.com/core/crac/crac-introductionCRaC是一个OpenJDK项目,可以“快......
  • Spring基于注解的IOC配置
    目录基于注解的IOC配置1、用于创建对象的注解2、用于注入数据的3、用于改变作用范围的和生命周期相关基于注解的IOC配置曾经XML的配置<beanid="accountService"class="com.zjw.service.impl.AccountServiceImpl"scope=""init-method=""destroy-method=""><pro......