zoukankan      html  css  js  c++  java
  • spring-retry简单demo(附完整代码)

    重试

    最近项目要用到重试。开始想自己写,后来想用RetryTemplate,最后想到既然项目用了springboot,还是直接集成spring-retry把。

    代码

    Application

    package com.danni;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.retry.annotation.EnableRetry;
    
    @SpringBootApplication
    @EnableRetry
    public class Application {
    
        public static void main(String[] args) throws Exception {
            @SuppressWarnings("resource")
    		ApplicationContext annotationContext = new AnnotationConfigApplicationContext("com.danni");
            RemoteService remoteService = annotationContext.getBean("remoteService", RemoteService.class);
            remoteService.call();
        }
    }
    

    RemoteService

    package com.danni;
    
    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 {
    @Retryable(value= {RemoteAccessException.class},maxAttempts = 3,backoff = @Backoff(delay = 5000l,multiplier = 1))
    public void call() throws Exception {
            System.out.println("do something...");
            throw new RemoteAccessException("RPC调用异常");
    }
    @Recover
    public void recover(RemoteAccessException e) {
            System.out.println(e.getMessage());
    }
    }
    

    pom.xml

    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>spring-retry-demo</groupId>
    	<artifactId>spring-retry-demo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.3.RELEASE</version>
    	</parent>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<!-- Spring Retry -->
    		<!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry -->
    		<dependency>
    			<groupId>org.springframework.retry</groupId>
    			<artifactId>spring-retry</artifactId>
    			<!-- <version>1.1.2.RELEASE</version> -->
    		</dependency>
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjweaver</artifactId>
    			<!-- <version>1.8.6</version> -->
    		</dependency>
    	</dependencies>
    	<build>
    		<sourceDirectory>src</sourceDirectory>
    		<plugins>
    			<plugin>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.7.0</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    

    运行

    ...省略
    16:33:26.561 [main] INFO org.springframework.jmx.export.annotation.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
    16:33:26.561 [main] DEBUG org.springframework.jmx.export.annotation.AnnotationMBeanExporter - Autodetecting user-defined JMX MBeans
    16:33:26.561 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@170da4c]
    16:33:26.561 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
    16:33:26.561 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor'
    16:33:26.561 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source
    16:33:26.561 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'remoteService'
    16:33:26.577 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry: count=0
    do something...
    16:33:26.592 [main] DEBUG org.springframework.retry.backoff.ExponentialBackOffPolicy - Sleeping for 5000
    16:33:31.592 [main] DEBUG org.springframework.retry.support.RetryTemplate - Checking for rethrow: count=1
    16:33:31.592 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry: count=1
    do something...
    16:33:31.592 [main] DEBUG org.springframework.retry.backoff.ExponentialBackOffPolicy - Sleeping for 5000
    16:33:36.592 [main] DEBUG org.springframework.retry.support.RetryTemplate - Checking for rethrow: count=2
    16:33:36.592 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry: count=2
    do something...
    16:33:36.592 [main] DEBUG org.springframework.retry.support.RetryTemplate - Checking for rethrow: count=3
    16:33:36.592 [main] DEBUG org.springframework.retry.support.RetryTemplate - Retry failed last attempt: count=3
    RPC调用异常
    

    代码下载

    https://gitee.com/danni3/spring-retry-demo

    参考

    https://blog.csdn.net/u014513883/article/details/52371198
    https://github.com/spring-projects/spring-retry
    https://www.cnblogs.com/EasonJim/p/7684649.html

  • 相关阅读:
    Shell学习笔记之shell脚本和python脚本实现批量ping IP测试
    SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
    Web负载均衡学习笔记之四层和七层负载均衡的区别
    SNMP学习笔记之SNMP树形结构介绍
    Web负载均衡学习笔记之实现负载均衡的几种实现方式
    HCNP学习笔记之子网掩码的计算和划分详细
    HCNP学习笔记之IP地址、子网掩码、网关的关系
    Linux学习笔记之passwd:Authentication token manipulation error_错误的解决办法
    ubuntu 系统关键指令
    Jetson tk1 hash sum mismatch
  • 原文地址:https://www.cnblogs.com/ouyida3/p/9463463.html
Copyright © 2011-2022 走看看