Spring Retry
1. 재시도 하는 방법
웹 개발 시에 어떠한 특정 로직을 재시도 해야하는 일이 있었습니다. 그래서 찾아본 방법은
- Spring Retry 활용
- Apache HttpClient의 Retry 기능 활용
- 로직 실패 시에 재실행 하도록 코딩
이 정도가 있었습니다. 하지만 그래도 Spring을 활용하는 방식이 가장 좋은 것 같아 사용해보고 정리한 글입니다.
2. 사용 방법
1. 의존성 추가
저는 maven을 사용했으므로 maven 기준에서 적겠습니다. retry와 aspects 2개가 필요합니다.
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
2. Retry 기능 활성화
spring boot라면 springBootApplication 같은 진입점 혹은 Configuration에 @EnableRetry를 붙여 기능을 활성화 합니다.
@SpringBootApplication
@EnableRetry
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableRetry
@Configuration
public class RetryConfiguration {
}
3. Retry 시키고 싶은 메소드에 어노테이션 달기
@Retryable(value = {ApiFailException.class}, maxAttempts = 3, backoff = @Backoff(delay = 500))
public ABC targetMethod(String str) {
}
- value : 해당 exception 발생시 retry 실행
- maxAttempts : 최대 시도 횟수, Default는 3
- backoff : retry 시도간 딜레이
4. Retry 최종 실패시 실행할 메소드에 어노테이션 달기
@Recover
public ABC recoverMethod(ApiFailException exception, String str) {
}
Recover 메소드의 인자로는 (Retry 메소드의 exception, Retry 메소드의 인자) 형식으로 들어갑니다
5. 주의할 점
- retryable 메소드와 recover 메소드는 같은 반환형을 가져야합니다. 그렇지 않으면 Recovery method를 찾지 못한다는 오류가 발생합니다.
위 처럼 사용하는 것이 가장 간단한 사용방법입니다. 더 원하는대로 맞춰서 사용하려면 retry template을 사용하시면 됩니다. retry template에 관한 내용은 다음 게시글에서 다루겠습니다.
반응형
'Web > 웹 상식' 카테고리의 다른 글
Java에서 외부 프로세스 실행하기 (0) | 2021.04.07 |
---|---|
Http와 Rest API에 대한 간단한 정리 (0) | 2021.03.05 |
Vue.js 3.0 과 Vite (0) | 2020.09.23 |
Spring Webflux에 대하여 (0) | 2020.09.14 |
Apache-Tomcat 설정 파일 정리 (0) | 2020.09.11 |