在下面的方法中,我正在使用重试逻辑,我期望第一次尝试失败,对于第二次尝试,它应该成功保存。
public Record saveRecord(Record Record) {
try {
return vcRetry.execute(
context -> {
System.out.println("Inside the Method");
if(context.getRetryCount()==0)
throw new RuntimeException("Something went wrong");
return RecordDao.save(Record);
});
以上方法仅执行一次,我已经对vcRetry模板属性进行了一些调试:
请帮助为什么第二次不回来?
答案 0 :(得分:0)
我认为,我们将重试特定类型的异常。尝试下面的链接,
答案 1 :(得分:0)
我尝试了您的代码,效果很好。但您将 backOffPeriod 设置为 12 秒。也许您应该更有耐心((12秒))来接听第二个电话。 请将您的backOffPeriod更改为2秒,然后重试。
我对您的情况进行了如下编码:
创建RetryTemplate
@Configuration
public class Config {
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
//BackOff Policy
FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(2000l);
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
//Retry Policy
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(2);
retryTemplate.setRetryPolicy(retryPolicy);
return retryTemplate;
}
}
在TestService中使用retryTemplate
@Service
public class TestService {
@Autowired
private RetryTemplate retryTemplate;
public String testService() {
//Retryable
String result = retryTemplate.execute(context -> {
System.out.println("Inside the Method, Retry = " + context.getRetryCount());
if (context.getRetryCount() == 0)
throw new RuntimeException("Something went wrong");
return "Successfully Completed";
});
//Result
System.out.println("FINAL Result = " + result);
return result;
}
}
控制台结果:
在方法内,重试= 0
在方法内部,重试= 1
最终结果=成功完成