본문 바로가기

개발/JAVA

[Java] No thread-bound request found: Are you referring to request attributes outside of an actual web request ... 에러

반응형

- 나의 상황 

 : 데이터를 최신 상태로 업데이트 하는 기능을 개발하는 중이었다.. 웹에서 버튼을 통해 실시간으로, 서버 내부의 scheduler job 을 이용해 주기적으로 업데이트 해줄 수 있도록 해야하는데.. scheduler job에서 service 호출 시 만난 에러다.

- 에러 코드

ERROR [scheduling-1] org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler: Unexpected error occurred in scheduled task
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131)
	at com.dreamsecurity.v2x.scms.webadmin.ra.common.aop.AuditLogAspect.logAround(AuditLogAspect.java:76)

  

- 원인 

: 실제 웹 외부의 요청 특성을 나타내는 스레드 바운드 요청을 찾지 못해서 나는 오류. 

요청을 수행할 수 있는 실질적인 thread, request 정보가 존재하지 않아서 발생하는 오류.

(참고: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rhkrehduq&logNo=221522306443)

-해결 

: 나의 경우는.. 서비스 단에 만든 메소드를 웹에서도 url을 통해 요청 하고 내부 스케쥴러에 의해서도 요청.... 스케쥴러에 의해 동작하는 요청은 request 에 필요한 정보를 가져올 수 없어서 난 오류였다. 근데 service 안의 메소드에서는 request 를 사용하지않는데....? 하고 보니 웹 관리도구의 이력관리를 위해 추가한 class 에서 해당 서비스 클래스를 다 체크하고있고 거기서 request를 사용한다! 

나는 두 로직을 분리해서 해결했다.. audit이 관리하지 않는 서비스 클래스를 생성해서 scheduler 는 새 서비스의 메소드를 호출하도록..! 

반응형

'개발 > JAVA' 카테고리의 다른 글

boolean 변수 바인딩 에러.  (2) 2022.12.30