RestControllerでSpringの再試行が機能しない

ファルコン

春の再試行を試みていますが、奇妙な問題に直面しています。Rest Controller内のメソッドで再試行アノテーションを使用すると、再試行が機能しません。しかし、そのメソッドを別のサービスクラスに移動すると、機能します。次のコードは機能しません。

@RestController
public class HelloController {

    @RequestMapping(value = "/hello")
    public String hello() {
        return getInfo();
    }

    @Retryable(RuntimeException.class)
    public String getInfo() {
        Random random = new Random();
        int r = random.nextInt(2);
        if (r == 1) {
            throw new RuntimeException();
        } else {
            return "Success";
        }
    }
}

しかし、以下はそうです:

@RestController
public class HelloController {

    @Autowired
    private SomeService service;

    @RequestMapping(value = "/hello")
    public String hello() {
        String result = service.getInfo();
        return result;
    }
}

@Service
public class SomeService {

    @Retryable(RuntimeException.class)
    public String getInfo() {
        Random random = new Random();
        int r = random.nextInt(2);
        if (r == 1) {
            throw new RuntimeException();
        } else {
            return "Success";
        }
    }
}

私の質問は@Retryable、コントローラーで使用したときにが機能しないのはなぜですか?

nicholas.hauschild

表示されている問題は、getInfo()メソッドの呼び出し方法が原因です

最初の例ではgetInfo()、同じSpringマネージドBean内から呼び出しています。2番目の例ではgetInfo()、別のSpringマネージドBeanから呼び出しています。この区別は微妙ですが、非常に重要であり、問​​題の原因である可能性が非常に高くなります。

@Retryableアノテーションを使用すると、Springは元のBeanの周りにプロキシを作成して、特別な状況で特別な処理を実行できるようにします。この特定のケースでは、SpringはAdviceを適用して、実際のメソッドへの呼び出しを委任し、RuntimeExceptionスローする可能性のあるをキャッチして、@Retryableアノテーションの構成に従ってメソッドの呼び出しを再試行します

あなたの場合、このプロキシが重要である理由は、外部の発信者だけがプロキシのアドバイスを見るからです。Beanは、プロキシされていることを認識しておらず、そのメソッドが(プロキシのアドバイスによって)呼び出されていることだけを知っています。Beanがそれ自体でメソッドを呼び出す場合、それ以上のプロキシは含まれません。そのため、再試行は実際には発生しません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring Integration + SQS-例外での再試行が機能しない

分類Dev

SpringBatchで再試行機能が機能しない

分類Dev

WorkManagerの再試行が機能しない

分類Dev

karatedslの再試行機能が機能していません

分類Dev

Spring再試行テンプレートが@ org.springframework.transaction.annotation.Transactionalで機能しない

分類Dev

RestControllerがSpring Bootで機能しないのはなぜですか?

分類Dev

RxJSを再試行してから、catchErrorが機能しない

分類Dev

再試行可能な注釈が春のバッチアプリケーションで機能しない

分類Dev

Spring RestControllerがweblogic10.3 / Springブートで機能しない

分類Dev

リボン再試行構成が機能しない

分類Dev

AzurePython関数の再試行制限がロジックアプリで機能しない

分類Dev

AzurePython関数の再試行制限がロジックアプリで機能しない

分類Dev

再試行機能が3カウントを超えて機能しない

分類Dev

Spring @Retryableが再試行を提供しないのはなぜですか?

分類Dev

Spring Batch- ItemWriter-DataIntegrityViolationException-レコードのスキップ-再試行-機能しない

分類Dev

bigqueryで更新を再試行しても機能しないようです

分類Dev

sudo を使用して再試行すると、なぜ pip のキャッシュが機能しないのですか?

分類Dev

C#-Selenium-再試行属性がSeleniumタイムアウトで機能しない

分類Dev

スプリング統合スプリッターで再試行ポリシーが機能しないのはなぜですか?

分類Dev

ジュニパーSRXシステム-再試行-オプションが機能しないのはなぜですか?

分類Dev

タイムアウトマネージャが無効になっていると、NServiceBusで第2レベルの再試行が機能しません

分類Dev

再試行のための既存の機能的な方法-Scalaまで?

分類Dev

Spring Batchが管理するトランザクションがロールバックしたときに再試行が機能しない

分類Dev

接続切断が機能しない場合は再試行してください

分類Dev

onInitの再実行が機能しない

分類Dev

他のパッケージの@RestControllerが機能しない

分類Dev

RestControllerがoauth2SpringBootで機能しない

分類Dev

JTabbedPaneの再描画が機能しない

分類Dev

javax の再描画が機能しない

Related 関連記事

  1. 1

    Spring Integration + SQS-例外での再試行が機能しない

  2. 2

    SpringBatchで再試行機能が機能しない

  3. 3

    WorkManagerの再試行が機能しない

  4. 4

    karatedslの再試行機能が機能していません

  5. 5

    Spring再試行テンプレートが@ org.springframework.transaction.annotation.Transactionalで機能しない

  6. 6

    RestControllerがSpring Bootで機能しないのはなぜですか?

  7. 7

    RxJSを再試行してから、catchErrorが機能しない

  8. 8

    再試行可能な注釈が春のバッチアプリケーションで機能しない

  9. 9

    Spring RestControllerがweblogic10.3 / Springブートで機能しない

  10. 10

    リボン再試行構成が機能しない

  11. 11

    AzurePython関数の再試行制限がロジックアプリで機能しない

  12. 12

    AzurePython関数の再試行制限がロジックアプリで機能しない

  13. 13

    再試行機能が3カウントを超えて機能しない

  14. 14

    Spring @Retryableが再試行を提供しないのはなぜですか?

  15. 15

    Spring Batch- ItemWriter-DataIntegrityViolationException-レコードのスキップ-再試行-機能しない

  16. 16

    bigqueryで更新を再試行しても機能しないようです

  17. 17

    sudo を使用して再試行すると、なぜ pip のキャッシュが機能しないのですか?

  18. 18

    C#-Selenium-再試行属性がSeleniumタイムアウトで機能しない

  19. 19

    スプリング統合スプリッターで再試行ポリシーが機能しないのはなぜですか?

  20. 20

    ジュニパーSRXシステム-再試行-オプションが機能しないのはなぜですか?

  21. 21

    タイムアウトマネージャが無効になっていると、NServiceBusで第2レベルの再試行が機能しません

  22. 22

    再試行のための既存の機能的な方法-Scalaまで?

  23. 23

    Spring Batchが管理するトランザクションがロールバックしたときに再試行が機能しない

  24. 24

    接続切断が機能しない場合は再試行してください

  25. 25

    onInitの再実行が機能しない

  26. 26

    他のパッケージの@RestControllerが機能しない

  27. 27

    RestControllerがoauth2SpringBootで機能しない

  28. 28

    JTabbedPaneの再描画が機能しない

  29. 29

    javax の再描画が機能しない

ホットタグ

アーカイブ