1:引入jar:
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
2:代码入口service:重试:
package com.bfxy.springboot.service;
import java.util.concurrent.TimeoutException;
import org.springframework.remoting.RemoteAccessException;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
@EnableRetry
@Service
public class RetryService {
@Retryable(
value = {RemoteAccessException.class, TimeoutException.class}, //什么异常进行重试
maxAttempts = 3, //重试次数
backoff = @Backoff( delay = 2000, multiplier =5)
)
public void call() throws Exception {
System.err.println("执行了call方法....");
//RPC服务调用(timeout...)
//throw new RemoteAccessException("rpc调用异常...");
throw new TimeoutException("超时异常..");
}
@Recover
public void recover(RemoteAccessException re){
System.err.println("最终重试失败,进行补偿: " + re.getMessage());
}
@Recover
public void recover(TimeoutException te){
System.err.println("最终重试失败,进行补偿: " + te.getMessage());
}
}
3:方法使用:
package com.bfxy.springboot;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.bfxy.springboot.service.RetryService;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Test
public void contextLoads() {
}
@Autowired
private RetryService retryService;
@Test
public void testRetry() throws Exception {
retryService.call();
}
}