[SPRING] 스프링 빈의 기본 클래스에 정의 된 메소드에서 @Retryable 사용은 재 시도되지 않는다.
SPRING스프링 빈의 기본 클래스에 정의 된 메소드에서 @Retryable 사용은 재 시도되지 않는다.
B 형 스프링 관리 빈이있다 @Configuration 클래스에 @EnableREtry가있다. doStuff ()에서 @Retryable을 사용하면 메서드가 예상대로 실패시 다시 시도됩니다.
그러나, 다시 시도하고 싶은 메소드는 기본 클래스에 정의 된 메소드입니다. A. A는 구체적인 클래스이며 스프링 관리 빈이 아닙니다. doSomethingElse 메서드는 예외를 throw 할 때 다시 시도되지 않습니다.
정말 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();
}
}
해결법
-
==============================
1.@Retryable은 Spring AOP를 사용하여 구현됩니다.
@Retryable은 Spring AOP를 사용하여 구현됩니다.
재 시도 가능한 메소드에 대한 외부 호출 만이 프록시를 통과합니다 (RetryTemplate 내의 메소드를 호출 함). 클래스 내의 내부 호출은 프록시를 우회하므로 재 시도되지 않습니다.
애플리케이션 컨텍스트에서 프록시에 대한 참조를 얻고이를 호출하거나 doStuff () 메소드 내에서 직접 RetryTemplate을 사용하기위한 트릭을 몇 가지 할 수 있습니다.
from https://stackoverflow.com/questions/41855386/using-retryable-in-methods-define-in-spring-beans-base-class-are-not-retried by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 로그백 DB 애 퍼더 속성 (0) | 2019.05.24 |
---|---|
[SPRING] 클래스로드와 관련된 전쟁 배포 오류 (0) | 2019.05.24 |
[SPRING] 봄 REST LocalDate UTC는 하루 중 하나와 다릅니다. (0) | 2019.05.24 |
[SPRING] 관계가있는 엔티티에 대한 스프링 데이터 휴지 상태 500 (0) | 2019.05.23 |
[SPRING] "보안 토큰 서비스 설명자에 키 설명자가 없습니다"라는 STS 참조 추가 오류가 발생합니다. (0) | 2019.05.23 |