main启动需要添加注解
@EnableRetry
service接口
public interface RetryService {
void testRetry();
}
service实现
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 RetryServiceImpl implements RetryService {
@Override
@Retryable(value = Exception.class, maxAttempts = 5, backoff = @Backoff(delay = 3000, multiplier = 2, maxDelay = 20000))
public void testRetry() {
System.out.println("in test retry: " + System.currentTimeMillis() / 1000);
int a = 1 / 0;
System.out.println("end in test retry");
}
@Recover
public void recover(Exception e) {
System.out.println("回调方法执行!!!");
}
}
controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RetryController {
@Autowired
private RetryService retryService;
@GetMapping("/test_retry")
@ResponseBody
public String testRetry() {
try {
retryService.testRetry();
return "ok";
} catch (Exception e) {
e.printStackTrace();
}
return "error";
}
}
main
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.retry.annotation.EnableRetry;
@SpringBootApplication
@EnableRetry
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}