728x90
반응형
Spring boot에서 특정 작업을 다시한번 시도해야 할때가 있다.
나같은 경우는 API 호출에 에러가 발생했을때 다시 API를 호출해야해서 Retry와 Recover를 사용하였다.
Retry와 같은 경우는 말 그대로 특정 조건에 따라서 다시 반복하는것이고 Recover는 Retry를 다 시도했음에도
안되는것들에 대해서 시도하는 로직을 구성하는 부분이다.
그럼 이제 Retry와 Recover의 사용법에 대해서 알아보자.
일단은 pom.xml에 dependency를 추가해줘야 한다.
<!-- spring - retry 사용을 위한 dependency -->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.13</version>
</dependency>
이렇게 추가를 해줬다면
springBootApplication 혹은 Configuration에 @EnableRetry를 붙여 기능을 활성화한다.
@EnableScheduling
@EnableRetry //여기
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(Application.class, args);
}
@PostConstruct
public void started(){
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
}
그리고 이제 Retry하고 싶은 메소드에 아래와 같이 어노테이션을 붙여준다.
@Retryable(value = {ApiCallError.class},maxAttempts = 3, backoff= @Backoff(delay = 900000))
@Scheduled(cron="0 30 1 * * *", zone = "Asia/Seoul")
public void callAPi() throws InterruptedException, ApiCallError {}
안에 들어가는 값들에 대해 살펴보자면
value : {}안에 들어있는 예외 발생시 retry 실행
maxAttempts : 최대로 반복할 횟수 (default는 3)
backOff() : 몇초를 간격으로 retry를 할지
그럼 이제 Retry를 통해서 재시도를 만들었지만 이것조차안될때 실행하는 Recover를 만들자.
@Recover
public void recoverApi(ApiCallError error){
logger.error("API connection failed no more retry");
String emailMessage = "API connection failed please check your code";
ms.sendErrorMail(emailMessage);
}
위소스가 Recover의 예시인대 여기서 제일 중요할점은 error catch하는것을 제외하고는 매개변수가 같아야하고 반환값도 같아야 한다.
나 같은 경우는 위에 callAPI()가 매개변수가 없었기때문에 Recover도 매개변수가 에러유형빼고는
매개변수가 없는것으로 같다.
반응형
'코딩일기 > 날씨앱 만들기 프로젝트' 카테고리의 다른 글
[AWS] EC2에서 RDS와 연동하기(MySQL) (0) | 2022.01.25 |
---|---|
[리눅스 / Ubuntu] Ubuntu 에 maven 설치하기 (0) | 2022.01.25 |
[Spring Boot] 메일 발송 SMTP 사용법 (Google) (0) | 2022.01.25 |
[Spring Boot] RestAPI 만들기 예제 (0) | 2021.12.16 |
[RestAPI] Rest, RestAPI 설명 및 설계 규칙 (0) | 2021.12.16 |