4.1 개발환경에서 boot template project 생성 후 외부 톰캣을 이용할 경우 오류가 납니다.
- 작성자 :
- k****g
- 작성일 :
- 2023-12-11 16:51:15
- 조회수 :
- 1,280
- 구분 :
- 개발환경 / 4.1
- 진행상태 :
- 완료
Q
스프링 부트 : 2.7.0
서블릿 : 3.1
4.1 개발환경에서 boot template project 생성 후 내부 톰캣을 이용한 서버 구동은 정상 실행이 되는 것을 확인 했습니다.
근데 외부 톰캣을 생성해서 연동 후 SpringBootServletInitializer 을 상속한 방법으로 이클립스에서 톰캣을 실행했을 때는 오류가 났습니다.
12월 11, 2023 4:42:59 오후 org.apache.catalina.core.StandardContext listenerStart
심각: Context initialized 이벤트를 [org.springframework.web.context.ContextLoaderListener] 클래스의 인스턴스인 리스너에 전송하는 동안 예외 발생
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
EgovWebApplicationInitializer 소스를 확인하고 의심가는 부분을 확인 해봤는데 addRootContext 메소드의
servletContext.addListener(new ContextLoaderListener(rootContext));
이 부분을 주석처리하면 동작이 잘 됩니다.
콘솔도 확인해 보면 SpringBootServletInitializer 클래스의 설정내용이 처음 나오고 그 다음 EgovWebApplicationInitializer 의 onStartup 메소드가 진행되는 것 같은데요.
제가 궁금한 건
단순히 servletContext.addListener 이 부분을 주석처리 하고 사용해도 문제가 없는 것인지
그리고 root context를 커스터마이징 하고 싶을 경우, 지금의 샘플 프로젝트의 경우 addRootContext 메소드를 사용하여 외부 톰캣을 구동하고 싶을 경우
어떻게 해야 하는지
이 두가지가 궁금합니다.
게시판 보면 '외장톰캣사용에 대한 공식 가이드 문서는 별도로 제공하지 않습니다.' 라는 내용이 있던데 외장톰캣 사용 방법은 알고 있고
EgovWebApplicationInitializer onStartup 의 커스터마이징에 대한 질문이니 답변을 부탁드립니다.
서블릿 : 3.1
4.1 개발환경에서 boot template project 생성 후 내부 톰캣을 이용한 서버 구동은 정상 실행이 되는 것을 확인 했습니다.
근데 외부 톰캣을 생성해서 연동 후 SpringBootServletInitializer 을 상속한 방법으로 이클립스에서 톰캣을 실행했을 때는 오류가 났습니다.
12월 11, 2023 4:42:59 오후 org.apache.catalina.core.StandardContext listenerStart
심각: Context initialized 이벤트를 [org.springframework.web.context.ContextLoaderListener] 클래스의 인스턴스인 리스너에 전송하는 동안 예외 발생
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
EgovWebApplicationInitializer 소스를 확인하고 의심가는 부분을 확인 해봤는데 addRootContext 메소드의
servletContext.addListener(new ContextLoaderListener(rootContext));
이 부분을 주석처리하면 동작이 잘 됩니다.
콘솔도 확인해 보면 SpringBootServletInitializer 클래스의 설정내용이 처음 나오고 그 다음 EgovWebApplicationInitializer 의 onStartup 메소드가 진행되는 것 같은데요.
제가 궁금한 건
단순히 servletContext.addListener 이 부분을 주석처리 하고 사용해도 문제가 없는 것인지
그리고 root context를 커스터마이징 하고 싶을 경우, 지금의 샘플 프로젝트의 경우 addRootContext 메소드를 사용하여 외부 톰캣을 구동하고 싶을 경우
어떻게 해야 하는지
이 두가지가 궁금합니다.
게시판 보면 '외장톰캣사용에 대한 공식 가이드 문서는 별도로 제공하지 않습니다.' 라는 내용이 있던데 외장톰캣 사용 방법은 알고 있고
EgovWebApplicationInitializer onStartup 의 커스터마이징에 대한 질문이니 답변을 부탁드립니다.
환경정보
-
- OS 정보 :
- 표준프레임워크 버전 :
- JDK(JRE) 정보 : 17.0.9
- WAS 정보 :
- DB 정보 :
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크센터입니다.
War로 배포하기 위해서 Spring Boot SpringBootServletInitializer를 상속하게 되면서
EgovWebApplicationInitializer에 있는 servletContext.addListener가 중복이 되는 것으로 보입니다.
해당 부분을 주석 처리하여도 동작에는 문제가 없을 것으로 보이나
센터에서 커스텀 관련하여 가이드 하는 사항은 없으니
참고만 부탁드립니다.
감사합니다.
표준프레임워크센터입니다.
War로 배포하기 위해서 Spring Boot SpringBootServletInitializer를 상속하게 되면서
EgovWebApplicationInitializer에 있는 servletContext.addListener가 중복이 되는 것으로 보입니다.
해당 부분을 주석 처리하여도 동작에는 문제가 없을 것으로 보이나
센터에서 커스텀 관련하여 가이드 하는 사항은 없으니
참고만 부탁드립니다.
감사합니다.