当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Springbean的基类中定义方法中使用@Retryable不会重试》经验,为你挑选了1个好方法。

我有一个类型为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()方法中使用.



1> Gary Russell..:

@Retryable使用Spring AOP实现.

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

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

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有