@retryable不重试的 Springboot

2022-09-01 19:44:31

下面的代码不重试。我错过了什么?

@EnableRetry
@SpringBootApplication
public class App implements CommandLineRunner
{
    .........
    .........


    @Retryable()
    ResponseEntity<String> authenticate(RestTemplate restTemplate, HttpEntity<MultiValueMap<String, String>> entity) throws Exception
    {
        System.out.println("try!");
        throw new Exception();
        //return restTemplate.exchange(auth_endpoint, HttpMethod.POST, entity, String.class);
    }

我已将以下内容添加到pom.xml。

    <dependency>
        <groupId>org.springframework.retry</groupId>
        <artifactId>spring-retry</artifactId>
        <version>1.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

我还尝试提供不同的参数组合来@Retryable。

@Retryable(maxAttempts=10,value=Exception.class,backoff=@Backoff(delay = 2000,multiplier=2))

谢谢。


答案 1

在spring boot 2.0.2 Release中,我观察到,如果您在同一类中具有可重试和调用的方法,则不起作用。在调试时发现切入点未正确构建。现在,此问题的解决方法是,我们需要将该方法写入其他类并调用它。@Retryable

工作示例可以在这里找到。


答案 2

对于要发现的方法的注释,需要从初始化的上下文中正确调用它。该方法是从弹簧上下文中的豆子调用的,还是通过其他方式调用的?@Retryable

如果测试这是你的跑步者使用 ?SpringJunit4ClassRunner


推荐