SPRING @Async를 활용한 multi thread 구현 - 4 - ExceptionHandler 생성

2017.07.11 11:41framework/spring

 

SPRING @Async를 활용한 multi thread 구현 - 4 - ExceptionHandler 생성

 

 

Spring 에서 비동기 처리를 하기 위해서 AsyncConfigurer@Asynk를 사용하려고 한다.

 

 

 개발 환경은 Java 8 , Tomcat 8 , Spring 4.1 이다.

 

 

본 포스팅은  

 

 

SPRING @Async를 활용한 multi thread 구현 - 1 - 개요

SPRING @Async를 활용한 multi thread 구현 - 2 - AsyncConfigurer 생성

SPRING @Async를 활용한 multi thread 구현 - 3 - @Async 사용 및 Task 추가

SPRING @Async를 활용한 multi thread 구현 - 4 - ExceptionHandler 생성

SPRING @Async를 활용한 multi thread 구현 - 5 - 구현

 

 



 

이번 시간에는 ExceptionHandler를 만들어 보자.

 

먼저 ExceptionHandler 란 단순하게 말해서 예외상황 발생 시 한 곳에서 처리하겠다 라는 정도라고 생각해 놓자.

 

비동기로 특정 로직을 처리하다 보면 이 로직의 실행이 성공했는지 실패했는지 등을 관리할 필요가 있다.

 

 

 

 

핸들러 클래스를 만들자.

1
public class AsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
cs

1# : AsyncUncaughtExceptionHandler를 상속받는 클래스를 만든다.

 

 

AsyncUncaughtExceptionHandler를 상속받게 되면 @Override를 해야 하는 함수가 있다.

handleUncaughtException 함수이다.

오류가 발생 시 해당 오류 메시지와 함수 등 정보들을 제공한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
    @Override
    public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
        System.out.println("==============>>>>>>>>>>>> THREAD ERROR");
        System.out.println("Exception Message :: " + throwable.getMessage());
        System.out.println("Method Name :: " + method.getName());
        for (Object param : obj) {
            System.out.println("Parameter Value :: " + param);
        }
        
        // JOB_LOG : 종료 입력
        // ...
        System.out.println("==============>>>>>>>>>>>> THREAD ERROR END");
    }
cs

설명생략

 

 

핸들러 클래스를 만들었다.

 

가만있히 둔다고 연결이 되지 않는다.

 

 

핸들러 클래스를 연결시켜 주자

두번째 시간에 AsyncConfig 클래스를 생성할때 @Override 한 getAsyncUncaughtExceptionHandler 함수가 있다.

이 함수의 내용을 바꿔주면 된다.

1
2
3
4
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new AsyncExceptionHandler();
    }
cs

위에서 생성한 AsyncExceptionHandler 클래스를 연결시켜 준다.

 

이로서 스레드에서 예외상황 발생시 처리할 수 있는 handler를 만들었다.

 

 

다음 시간에는 생성한 task를 사용해보는 시간을 가져보자.

 

 

전체소스

AsyncConfig.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.lang.reflect.Method;
 
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
 
/**
 * @Title      : AsyncConfig Exception Handler
 * @Filename   : AsyncExceptionHandler.java
 */
public class AsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
 
    /**
     * AsyncTask 에서 오류 발생 시 실행
     */
    @Override
    public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
        System.out.println("==============>>>>>>>>>>>> THREAD ERROR");
        System.out.println("Exception Message :: " + throwable.getMessage());
        System.out.println("Method Name :: " + method.getName());
        for (Object param : obj) {
            System.out.println("Parameter Value :: " + param);
        }
        
        // JOB_LOG : 종료 입력
        // ...
        System.out.println("==============>>>>>>>>>>>> THREAD ERROR END");
    }
 
}
cs

 



 

AsyncConfig.java 파일에 getAsyncUncaughtExceptionHandler 함수 변경

1
2
3
4
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new AsyncExceptionHandler();
    }
cs