2012-04-30 8 views
3

내 응용 프로그램에 2 개의 컨텍스트가 있는데 하나는 "스프링"(Web + MVC)이고 두 번째는 "rpc"(RPC 서비스)입니다. 두 파일 모두 "spring"디렉토리 (app-config.xml, infrastructure-config.xml, integration-config.xml 및 security-config.xml의 4 개 파일)에서 configs를 상속합니다.Double (Scheduler) Bean 초기화

app-config.xml에는 Quartz Scheduler가 초기화되어 있습니다.

내 응용 프로그램을 시작하면 두 개의 Quartz Scheduler 스레드가 있고 모든 예약 된 서비스가 두 번 호출됩니다. 그 이유는 app-confix.xml에서 두 컨텍스트로 설정을 상속했기 때문입니까?

부모 구성에서 정의 된 bean은 한 번만 초기화되고 해당 부모 구성을 상속하는 컨텍스트간에 공유된다고 생각했습니다.

모든 조언 주셔서 감사합니다 :).

예제는 web.xml입니다.

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring/*-config.xml 
    </param-value> 
</context-param> 

<servlet> 
    <servlet-name>rpc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>0</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>rpc</servlet-name> 
    <url-pattern>/rpc/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/web/*</url-pattern> 
</servlet-mapping> 

답변

3

두 개의 독립적 인 컨텍스트가 생성됩니다. 동일한 파일을 사용한다는 사실만으로도 스프링이 공통적 인 상위 컨텍스트를 만들지는 않습니다.

web.xml에서 contextLoaderListener를 설정해야합니다. 공통 설정 파일을 제공 한 다음 servlet config에서 제외하십시오. Listener는 루트 컨텍스트를 생성하고이를 서블릿 컨텍스트에 바인딩합니다. 둘 다 서블릿을 부모 컨텍스트로 연결합니다.

+0

고맙습니다. 나는 이상한 또 다른 것을 발견했다. 디버그 모드에서 이클립스 (STS)에서이 앱을 직접 실행하면 단 하나의 쉴러 (Quartz) 인스턴스 만 존재한다. 동일한 구성, 동일한 바람둥이,하지만 dev 환경에서 단 하나의 빈 인스턴스입니다. – Peter