2012-04-30 65 views
3

我在我的應用程序中有兩個上下文,一個是「spring」(Web + MVC),另一個是「rpc」(只是RPC服務)。它們都從「spring」目錄繼承配置(有4個文件:app-config.xml,infrastructure-config.xml,integration-config.xml和security-config.xml)。雙(調度程序)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

在您的配置中,創建了兩個獨立的上下文。只是他們使用相同文件的事實不會導致spring創建一個共同的父上下文。

你需要做的是在web.xml中設置contextLoaderListener - 給它通用的配置文件,然後從servlets配置中排除它。監聽器將創建根上下文並將其綁定到servlet上下文 - 然後這兩個servlet將鏈接到上下文。

+0

謝謝,我會盡力的。我發現了另一件奇怪的事情如果我以調試模式直接從eclipse(STS)運行此應用程序,則只有一個schleduler(Quartz)實例。相同的配置,相同的tomcat,但在開發環境中只有一個bean實例。 – Peter