RetryTemplate仅执行一次

时间:2020-01-13 06:34:50

标签: java spring

在下面的方法中,我正在使用重试逻辑,我期望第一次尝试失败,对于第二次尝试,它应该成功保存。

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模板属性进行了一些调试: enter image description here

请帮助为什么第二次不回来?

2 个答案:

答案 0 :(得分:0)

我认为,我们将重试特定类型的异常。尝试下面的链接,

https://www.programcreek.com/java-api-examples/index.php?api=org.springframework.retry.policy.SimpleRetryPolicy

答案 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

最终结果=成功完成