在Spring bean的基类中定义方法中使用@Retryable不会重试

时间:2017-01-25 15:28:14

标签: java spring spring-retry

我有一个类型为B的spring托管bean。我在@Configuration类中有@EnableREtry。当我在doStuff()上使用@Retryable时,该方法会在失败时按预期重试。

但是,我真正想要重试的方法是在基类A中定义的方法.A是一个具体的类,而不是一个Spring托管bean。 <{1}}方法在抛出异常时不会重试。

我真的想要重试doSomethingElse,基类方法。但是,我不知道该怎么做。我猜它是因为A是一个具体的类而不是bean,尽管它确实作为基类。

我是否需要在A类中使用RetryableTemplate?

doSomethingElse

1 个答案:

答案 0 :(得分:7)

@Retryable是使用Spring AOP实现的。

只有对可重试方法的外部调用才会通过代理(调用RetryTemplate中的方法);类中的内部调用绕过代理,因此不会重试。

您可以使用一些技巧从应用程序上下文中获取对代理的引用并调用它,或者直接在RetryTemplate方法中使用doStuff()