为什么Spring @Retryable 不提供重试?
Why Spring @Retryable does not provide retry?
我刚刚设置了带有@Retryable 注释的最简单的Spring 应用程序。
@Service
public class MyRestService {
@Autowired
private RestTemplate restTemplate;
@Retryable(Exception.class)
public void runRest() {
ResponseEntity<String> response = restTemplate.getForEntity(
"https://dat.sparkfun.com/streams/dZ4EVmE8yGCRGx5XRX1W.json",
String.class);
}
@Recover
public void recover(Exception e) {
System.out.println("Recover=" + e);
}
}
根据 Spring 文档 (https://github.com/spring-projects/spring-retry),方法 运行Rest 应该是 运行 三次,因为它会抛出异常(特别是 org.springframework.web.client.ResourceAccessException) .但是,我没有观察到任何重试。将 ResourceAccessException 用作 @Retryable 的参数没有帮助。
抱歉,回答很简单。我需要在 class 中使用 main 方法指定 @EnableRetry。
@Configuration
@EnableRetry
public class Application {
您也可以使用基于 XML 的配置。
<aop:config>
<aop:pointcut id="retryable" expression="execution(* it..*class.method(..))" />
<aop:advisor pointcut-ref="retryable" advice-ref="retryAdvice" order="-1"/>
我刚刚设置了带有@Retryable 注释的最简单的Spring 应用程序。
@Service
public class MyRestService {
@Autowired
private RestTemplate restTemplate;
@Retryable(Exception.class)
public void runRest() {
ResponseEntity<String> response = restTemplate.getForEntity(
"https://dat.sparkfun.com/streams/dZ4EVmE8yGCRGx5XRX1W.json",
String.class);
}
@Recover
public void recover(Exception e) {
System.out.println("Recover=" + e);
}
}
根据 Spring 文档 (https://github.com/spring-projects/spring-retry),方法 运行Rest 应该是 运行 三次,因为它会抛出异常(特别是 org.springframework.web.client.ResourceAccessException) .但是,我没有观察到任何重试。将 ResourceAccessException 用作 @Retryable 的参数没有帮助。
抱歉,回答很简单。我需要在 class 中使用 main 方法指定 @EnableRetry。
@Configuration
@EnableRetry
public class Application {
您也可以使用基于 XML 的配置。
<aop:config>
<aop:pointcut id="retryable" expression="execution(* it..*class.method(..))" />
<aop:advisor pointcut-ref="retryable" advice-ref="retryAdvice" order="-1"/>