비동기 메소드 HttpServletRequest 이슈 해결
@Async로 선언된 비동기 메소드를 호출했다. 메소드는 해당 클래스에 @Autowired된 HttpServletRequest로 부터 정보를 가져오다가 SimpleAsyncUncaughtExceptionHandler.handleUncaughtException() 예외가 발생했다.
No thread-bound request found: Are you referring to request attributesoutside of an actual web request, or processing a request outside of theoriginally receiving thread.
원인은 비동기 처리시 다른 스레드에서 동작하기 때문이다.
해결방안
- request로 부터 필요한 정보를 메소드의 파라미터로 전달한다.
- 다음과 같이 RequestContextHolder에서 현재 HttpServletRequest를 가져온다.
// WebApplicationInitializer 설정에 리스너 추가
servletContext.addListener(new RequestContextListener());
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = attr.getRequest();
'Development > Spring' 카테고리의 다른 글
DatabaseConfiguration 적용 (0) | 2018.08.17 |
---|---|
Configuration Condition (0) | 2018.07.16 |
multiple 'X-Frame-Options' headers with conflicting 에러 (0) | 2017.12.15 |
비동기 어노테이션 (0) | 2017.11.25 |
캐시 어노테이션 (0) | 2017.10.06 |