[Spring] Async로 동작할때 Interceptor를 어떻게 탈까?
ㅎㅎ
일하면서 이런 이슈가 있었다.
Interceptor에서 데이터를 쌓고있는데
preHandle에서 왜 데이터가 두번 쌓이지?
라는 이슈가 있었다
그래서 검색해보니
https://www.logicbig.com/tutorials/spring-framework/spring-web-mvc/async-intercept.html
Spring MVC - Intercepting Async Requests using AsyncHandlerInterceptor
Spring MVC - Intercepting Async Requests using AsyncHandlerInterceptor [Updated: Feb 13, 2018, Created: Dec 9, 2016]
www.logicbig.com
이 링크를 찾았다
세상에 친절할 수가
Spring MVC InterceptorHandler called twice with DeferredResult
When I am using custom HandlerInterceptor and my controller returns DeferredResult, the preHandle method of my custom interceptor called twice on each request. Consider a toy example. My custom
stackoverflow.com
즉 간단히 정리하자면 Async로 동작하면 Sync로 동작하는것과는 Interceptor가 다르게 동작한다.
ㅇ ㅏ , 물론 AsyncInterceptor를 사용했을때 말이다.
요 순서로 돌아간다고 생각하면 된다.
preHandle
afterConcurrentHandlingStarted
preHandle
postHandle
afterCompletion
그리고 첫번째 링크에 있는 그림을 보면 더 잘 이해가 간다.
다른 New Thread가 PreHandle 을 통과 하기 때문에 저 순서 인 것이다.