3

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

app-config.xml 包含 Quartz 调度器的初始化。

所以,如果我启动我的应用程序,就会有两个 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>
4

1 回答 1

3

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

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

于 2012-05-08T08:54:38.710 回答