2016-09-15 6 views
0

Annotation 기반 Spring Retry를 사용하고 있습니다. 아래는 내 인터페이스입니다.Annotation 기반 Spring 재시도를 사용하여 런타임시 인터셉터를 동적으로 변경하십시오.

다운 스트림 서비스를 호출하기 위해이 인터페이스를 구현하는 클래스는 세 가지입니다. RetryInterceptor를 정의하여 각 다운 스트림 호출마다 별도의 재시도 정책을 정의 할 수 있어야합니다. 본질적으로 런타임에 RetryInterceptor를 변경하려고합니다.

Spring에서 RetryInterceptor를 런타임에 변경할 수 있고 코드가 특정 RetryOperationsInterceptor를 사용할 수있는 방법이 있습니까?

+0

왜 인터페이스에서 초록을 사용합니까? –

+1

인터셉터는 빈 생성시 만들어집니다. 그것을 바꾸는 것은 불가능할 것입니다. 나는 재시도 중개자를 위임하라는 유스 케이스라고 생각한다. 1 개의 인터셉터를 가지고 거기에 하위 인터셉터를 삽입하십시오. 인터셉터는 그때 당신이 그 decission을 만들었을 때 정확한 것을 위임 할 수 있습니다. – pandaadb

+0

일부 오래된 코드. abstract 키워드는 더 이상 사용되지 않으므로 삭제해야합니다. :). 그것을 지적 해 주셔서 고맙습니다. 위의 기능을 구현할 때 제거 할 것입니다. – ancoder

답변

1

인터셉터를 (쉽게) 변경할 수는 없지만 런타임에 RetryTemplate을 변경할 수 있습니다 (setRetryOperations()).

인터셉터 필드가 volatile이 아니므로 CPU 프로세서 캐시가 clieared 될 때까지 모든 스레드가 새 템플릿을보기까지 약간의 시간이 걸릴 수 있습니다.

상태 저장 재시도를 사용하는 경우 상태는 손실됩니다. 이 경우 기존 템플리트 (인터셉터에 있음)에서 재시도 정책을 변경할 수 있습니다.

관련 문제