티스토리 뷰
최근에 비동기식으로 api를 호출해야 할 일이 있었다.
[Controller]
for{ BasicService.함수A(); } |
[BasicService]
@Async 함수A() |
대략 이런 구조로 짰는데, 개발서버에서는 문제없이 기동되더니
운영에서 톰캣을 기동하니 문제를 일으켰다. 대략적인 내용은
in its raw version as part of a circular reference, but
has eventually been wrapped. This means that said other beans do not use the final
version of the bean. ~~~ 블라블라
구글링해보니 순환참조 때문이라는데
순환참조는
각각의 빈들을 서로서로 참조하다가 엉켜버리는 상황인 듯 하다.
A->B->A 이런식으로 호출하는 구조에서 어떤 빈을 먼저 생성해야할지 몰라서 엉켜버린 것이다.
해결방법은 스택오버플로에서 봤는데 답변자도 이게 베스트 솔루션은 아닐수있지만 이런식으로 해결했다고 하니 따라해봤다.
서비스단을 분리하는것
기존의 서비스단에서 함수A만 빼서 (나머지 함수는 그대로 BasicService단에 둠)
AsyncService 라고 별도의 서비스단 java 파일을 만들어서 해당 비동기식 함수A만 넣은 뒤, controller단에서 거기를 참조하게 해주었더니 성공!
'Spring' 카테고리의 다른 글
스프링 웹 프로젝트 복사해서 프로젝트명 바꿔서 재활용하기 (0) | 2017.11.14 |
---|---|
redirect 경로에 관하여 (0) | 2017.04.05 |
springMVC 에서 xml 설정 파일 설정하고 값 가져와서 사용하기 (0) | 2017.04.03 |
spring MVC session interceptor 예외처리(Spring3.2 & 3.1이하 ) (0) | 2017.02.20 |
Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper (0) | 2017.02.12 |
댓글