spring-retry의 2.0.1 버전부터는 @EnableRetry 어노테이션에 order 설정이 추가되었다.
@Retryable의 order 기본값은 Ordered.LOWEST_PRECEDENCE - 1
@Transational의 order 기본값은 Ordered.LOWEST_PRECEDENCE
그렇기 때문에 @Transational 보다 먼저 @Retryable이 적용될 수 있다.
@Retryable {
@Transactional {
Your method body
} End of @Transactional
} End of @Retryable
위와 같은 순서로 적용되어서 만약 내부 로직에 DB Operation이 있다면
retry시에 기존 Transaction과는 다른 Transaction으로 적용이 될 수 있게 된다.
@Order
우선순위를 가장 높게 설정하고 싶은 경우
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public ObjectMapper objectMapper() {
// ...
}
int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;
우선순위를 가장 낮게 설정하고 싶은 경우
@Bean
@Order(Ordered.LOWEST_PRECEDENCE)
public ObjectMapper objectMapper() {
// ...
}
int LOWEST_PRECEDENCE = Integer.MAX_VALUE;