Double(Scheduler)bean初始化

时间:2012-04-30 19:15:58

标签: spring spring-mvc web-config

我的应用程序中有2个上下文,一个是“spring”(Web + MVC),第二个是“rpc”(只是RPC服务)。它们都从“spring”目录继承配置(有4个文件:app-config.xml,infrastructure-config.xml,integration-config.xml和security-config.xml)。

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>

1 个答案:

答案 0 :(得分:3)

在您的配置中,将创建两个独立的上下文。只是他们使用相同文件的事实并不会导致spring创建一个共同的父上下文。

您需要做的是在web.xml中设置contextLoaderListener - 为其提供公共配置文件,然后将其从servlet配置中排除。监听器将创建根上下文并将其绑定到servlet上下文 - 然后servlet将作为父上下文链接到该上下文。