Java 代码重试实现方式
依赖包
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>learn-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>20</maven.compiler.source>
<maven.compiler.target>20</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.1.2</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.32</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.19</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.11</version>
</dependency>
</dependencies>
</project>
一.方法内直接自动重试
public static void main(String[] args) {
autoRetry(3);
}
/**
* 自动重试(执行总次数包含于重试次数内)
* 优点:实现简单
* 缺点:复用性差,代码侵入
* @param retryTimes
*/
public static void autoRetry(int retryTimes){
int times = 0;
do {
try {
int i = 3/0;
} catch (Exception e) {
times++;
System.out.println("第" + times + "次失败");
}
} while (times < retryTimes);
}
二.静态代理方式
1.启动类
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Administrator
*/
@SpringBootApplication
public class LearnApp {
public static void main(String[] args) {
SpringApplication.run(LearnApp.class,args);
}
}
2.接口
package org.example.service;
/**
* @description
* @author zhuwd && moon
* @version 1.0
*/
public interface LearnService {
/**
* 自动重试
*/
void autoRetry();
}
3.实现
package org.example.service.impl;
import org.example.service.LearnService;
import org.springframework.stereotype.Service;
/**
* @author zhuwd && moon
* @Description
* @create 2023-08-08 1:05
*/
@Service
public class LearnServiceImpl implements LearnService {
@Override
public void autoRetry() {
throw new RuntimeException();
}
}
4.静态代理
package org.example.service.impl;
import org.example.service.LearnService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stere