3

アプリケーションには2つのコンテキストがあります。1つは「spring」(Web + MVC)、もう1つは「rpc」(RPCサービスのみ)です。どちらも「spring」ディレクトリから設定を継承します(app-config.xml、infrastructure-config.xml、integration-config.xml、security-config.xmlの4つのファイルがあります)。

app-config.xmlには、Quartzスケジューラの初期化が含まれています。

したがって、アプリケーションを起動すると、2つのQuartz Schedulerスレッドがあり、スケジュールされたすべてのサービスが2回呼び出されます。これは、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

構成では、2つの独立したコンテキストが作成されています。それらが同じファイルを使用しているという事実だけでは、Springが共通の親コンテキストを作成することはありません。

あなたがする必要があるのは、web.xmlでcontextLoaderListenerをセットアップすることです-それに共通の設定ファイルを与えて、それをサーブレット設定から除外します。リスナーはルートコンテキストを作成し、それをサーブレットコンテキストにバインドします。両方のサーブレットが親コンテキストとしてそれにリンクします。

于 2012-05-08T08:54:38.710 に答える