我有一个类型为B的spring托管bean.我在@Configuration类中有@EnableREtry.当我使用@Retryable时doStuff()
,该方法会在失败时按预期重试.
但是,我真正想要重试的方法是在基类A中定义的方法.A是一个具体的类,而不是一个Spring托管bean.doSomethingElse
抛出异常时不会重试该方法.
我真的想要重试doSomethingElse,基类方法.但是,我不知道该怎么做.我猜它是因为A是一个具体的类而不是bean,尽管它确实充当了基类.
我是否需要在A类中使用RetryableTemplate?
public class B extends A { public void doStuff() { super.doSomethingElse(); } } public class A { // doesn't actually retry @Retryable public void doSomething() { throws new Exception(); } }
Gary Russell.. 8
@Retryable
使用Spring AOP实现.
只有外部调用可重试方法才能通过代理(调用a中的方法RetryTemplate
); 类中的内部调用绕过代理,因此不会重试.
您可以使用一些技巧从应用程序上下文中获取对代理的引用并调用它,或者RetryTemplate
直接在您的doStuff()
方法中使用.
@Retryable
使用Spring AOP实现.
只有外部调用可重试方法才能通过代理(调用a中的方法RetryTemplate
); 类中的内部调用绕过代理,因此不会重试.
您可以使用一些技巧从应用程序上下文中获取对代理的引用并调用它,或者RetryTemplate
直接在您的doStuff()
方法中使用.