[SPRING] 스프링 MVC 웹 응용 프로그램 : 응용 프로그램 컨텍스트가 두 번 시작됩니다.
SPRING스프링 MVC 웹 응용 프로그램 : 응용 프로그램 컨텍스트가 두 번 시작됩니다.
저는 Spring MVC REST API에 대해 연구하고 있습니다. 모든 것이 잘 작동하지만 로그에서 애플리케이션을 다시 시작할 때마다 applicationContext가 두 번로드된다는 사실을 알게되었습니다. 한 번은 Tomcat이 war 파일을로드 할 때가 있고 두 번째는 웹 앱이 처음으로 액세스 할 때입니다. 고객.
몇 가지 예를 들어 보겠습니다.
바람둥이 시작 직후 :
Apr 11, 2013 10:14:35 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
Apr 11, 2013 10:14:36 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
2013-04-11 10:14:36 INFO ContextLoader:273 - Root WebApplicationContext: initialization started
2013-04-11 10:14:36 INFO XmlWebApplicationContext:510 - Refreshing Root WebApplicationContext: startup date [Thu Apr 11 10:14:36 EDT 2013]; root of context hierarchy
2013-04-11 10:14:36 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]
2013-04-11 10:14:36 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [config-general.xml]
2013-04-11 10:14:37 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [config-db.xml]
2013-04-11 10:14:37 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [config-security.xml]
2013-04-11 10:14:37 INFO SpringSecurityCoreVersion:33 - You are running with Spring Security Core 3.1.3.RELEASE
2013-04-11 10:14:37 INFO SecurityNamespaceHandler:59 - Spring Security 'config' module version is 3.1.3.RELEASE
...
그리고 나서 현재 첫 번째 API 호출을 수행합니다.
INFO: Initializing Spring FrameworkServlet 'mvc-dispatcher'
2013-04-11 10:15:25 INFO DispatcherServlet:455 - FrameworkServlet 'mvc-dispatcher': initialization started
2013-04-11 10:15:25 INFO XmlWebApplicationContext:510 - Refreshing WebApplicationContext for namespace 'mvc-dispatcher-servlet': startup date [Thu Apr 11 10:15:25 EDT 2013]; parent: Root WebApplicationContext
2013-04-11 10:15:25 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]
2013-04-11 10:15:25 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [config-general.xml]
2013-04-11 10:15:25 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [config-db.xml]
2013-04-11 10:15:25 INFO XmlBeanDefinitionReader:315 - Loading XML bean definitions from class path resource [config-security.xml]
2013-04-11 10:15:25 INFO SecurityNamespaceHandler:59 - Spring Security 'config' module version is 3.1.3.RELEASE
확실히 이것은 정상적인 행동이 될 수 없다 ?? 내 web.xml은 다음과 같습니다.
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>REST API</display-name>
<!-- Servlets -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<!-- filters -->
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<servlet-name>mvc-dispatcher</servlet-name>
</filter-mapping>
<filter>
<filter-name>etagFilter</filter-name>
<filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>etagFilter</filter-name>
<servlet-name>mvc-dispatcher</servlet-name>
</filter-mapping>
<filter>
<filter-name>CompressingFilter</filter-name>
<filter-class>com.planetj.servlet.filter.compression.CompressingFilter</filter-class>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>statsEnabled</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CompressingFilter</filter-name>
<servlet-name>mvc-dispatcher</servlet-name>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- listeners -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
해결법
-
==============================
1.mvc-dispatcher는 사용자가 정의한 방식이므로 2x를로드 중입니다.
mvc-dispatcher는 사용자가 정의한 방식이므로 2x를로드 중입니다.
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value> </context-param>
~에서
<servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
첫 번째 방법은 일반적으로 "글로벌"또는 "루트"컨텍스트와 같은 것을로드하는 것입니다. 여기서 여러 개의 서블릿 컨텍스트에 의해 공유되는 모든 bean / resources를 둘 수 있습니다.
두 번째 방법은 대개 특정 서블릿 컨텍스트를로드하는 것입니다. 이 게시물의 첫 번째 답변은 mvc-dispatcher 구성 파일을 찾기 위해 명명 규칙을 사용하므로 명시 적으로 정의 할 필요가 없습니다.
mvc-dispatcher-servlet.xml에 정의 된 모든 것이 있습니까? 그렇다면
<context-param> .. </context-param>
그렇지 않으면 (미래의 유지 보수성을 위해 권장하는) 구성을 여러 파일로 분리 할 수 있습니다. 그런 다음 첫 번째 메소드를 통해 root-context.xml과 같은 형태로 공유 beans / resource를로드하고 각 servlet 컨텍스트에 대해 servletname-servlet.xml 아래의 각 servlet 특정 구성을로드하십시오.
from https://stackoverflow.com/questions/15951257/spring-mvc-web-app-application-context-starts-twice by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] web.xml url-pattern matcher에는 URL을 제외시키는 방법이 있습니까? (0) | 2019.01.29 |
---|---|
[SPRING] clone 또는 BeanUtils.copyProperties를 사용해야하며 이유는 무엇입니까? (0) | 2019.01.29 |
[SPRING] Spring : 커맨드 라인에서 하나의 application.property 덮어 쓰기 (0) | 2019.01.29 |
[SPRING] 모델 및 뷰 내부에서 리디렉션과 리디렉션의 차이점 (0) | 2019.01.29 |
[SPRING] JUnit 테스트 중 Application / CommandLineRunner 클래스 실행 방지 (0) | 2019.01.29 |