@Async를 활용한 비동기 방식을 사용하게 되면 예외 상황에서 요청에 대한 응답으로 에러를 받지 못하기 때문에 별도의 처리를 하지 않으면 서버 로그에만 에러가 남게 되고 모르고 넘어가는 경우가 있습니다.
이전 포스팅에서 예외상황을 @RestControllerAdvice 활용하여 한 곳에서 관리하도록 구현하였는데 비동기 상황에서도 동일하게 한 곳에서 예외처리를 하는 방법에 대해 알아보겠습니다.
1. Async Config 설정
아래 어노테이션을 설정하여 비동기 프로세스에 대해 설정을 추가합니다.
- @Configuration: 설정 클래스임을 명시
- @EnableAsync: 비동기 활성화, @Async 어노테이션 사용 가능
package kr.co.sample.sampleapi.common.config.async;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AsyncConfig extends AsyncConfigurerSupport {
@Autowired
private AsyncUncaughtExceptionHandler asyncExceptionHandler;
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return asyncExceptionHandler;
}
}
2. AsyncUncaughtExceptionHandler 구현
지난 포스팅에 추가한 공통 Exception Handler에 추가하여 비동기 예외상황에 대해 처리할 수 있습니다.
package kr.co.sample.sampleapi.common.response;
import kr.co.sample.sampleapi.common.enums.ExceptionEnum;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.nio.file.AccessDeniedException;
@RestControllerAdvice
public class ApiExceptionAdvice implements AsyncUncaughtExceptionHandler {
@Override
public void handleUncaughtException(Throwable e, Method method, Object... params) {
e.printStackTrace();
}
... (생략)
}
'Spring' 카테고리의 다른 글
[Spring Boot] Rest API 만들기(4) 예외 처리 @RestControllerAdvice (2) | 2021.01.23 |
---|---|
[Spring Boot] Rest API 만들기(3) Swagger API 문서 자동화 적용 (1) | 2021.01.13 |
[Spring Boot] Rest API 만들기(2) Controller 구현 (0) | 2021.01.12 |
[Spring Boot] Rest API 만들기(1)- 프로젝트 생성 intellij(Community) + JPA (0) | 2019.11.19 |