小编典典

春季重试,无需春季申请

java

我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring
retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用spring
retry?


阅读 215

收藏
2020-11-30

共1个答案

小编典典

我发现我可以使用RetryTemplate:

    RetryTemplate retryTemplate = new RetryTemplate();

    FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
    fixedBackOffPolicy.setBackOffPeriod(2000l);
    retryTemplate.setBackOffPolicy(fixedBackOffPolicy);

    SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
    retryPolicy.setMaxAttempts(5);
    retryTemplate.setRetryPolicy(retryPolicy);

    retryTemplate.execute(new RetryCallback<Void, Throwable>() {
            @Override
            public Void doWithRetry(RetryContext context) throws Throwable {
                // do some job
                if(context.getRetryCount() < 3){ // unexpected disconnection
                    log.error("connection failed");
                    throw new RuntimeException("retry exception"); 
                }
                System.out.println("RETRY" + context);
                return null;
            }
        });
2020-11-30