9

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

@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、コントローラーで使用するとなぜ動作しないのですか?

4

1 に答える 1