在Springbean基类中定义的方法中使用@Retryable的java不会被重试
我有一个类型为B的spring托管bean。我在@Configuration类中有@enablerery。当我在doStuff()
上使用@Retryable时,该方法会在失败时按预期重试
但是,我真正想重试的方法是在基类中定义的方法,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();
}
}
# 1 楼答案
@Retryable
是使用Spring AOP实现的只有对可重试方法的外部调用通过代理(代理在
RetryTemplate
中调用该方法);类内的内部调用绕过代理,因此不会重试您可以使用一些技巧从应用程序上下文获取对代理的引用并调用它,或者直接在
doStuff()
方法中使用RetryTemplate