2017-01-25 11 views
0

B型のスプリングマネージドBeanがあります。@EnableREtryは@Configurationクラスにあります。 doStuff()で@Retryableを使用すると、メソッドは期待どおりに失敗すると再試行されます。Spring Beanの基本クラスで定義されているメソッドで@Retryableを使用しても再試行されない

しかし、私が実際にやり直したいメソッドは、基本クラスで定義されたメソッドです.Aは具体的なクラスであり、スプリングマネージドBeanではありません。 doSomethingElseメソッドは例外をスローするときに再試行されません。

私は本当にdoSomethingElseを再試行したい、基本クラスのメソッド。しかし、私はこれを行う方法がわかりません。 Aは基本クラスとして機能しますが、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(); 
    } 
} 

答えて

4

@RetryableSpring AOPを使用して実装されています。

再試行可能メソッドへの外部呼び出しは、(RetryTemplate内のメソッドを呼び出す)プロキシを経由します。クラス内の内部呼び出しはプロキシをバイパスし、したがって再試行されません。

アプリケーションのコンテキストからプロキシへの参照を取得して呼び出すか、doStuff()メソッド内で直接RetryTemplateを使用すると便利です。

+0

私は、Springで管理されていないクラスで動作するため、ここではRetryTemplateが便利だと考えています(少なくとも私はそう想定しています)。 –

+0

それは正しいです。 –

関連する問題