2012-04-30 15 views
3

私のアプリケーションには2つのコンテキストがあり、1つは "spring"(Web + MVC)、2つ目は "rpc"(RPCサービス)です。どちらも "spring"ディレクトリ(app-config.xml、infrastructure-config.xml、integration-config.xml、security-config.xmlの4つのファイル)からconfigsを継承しています。ダブル(スケジューラ)Beanの初期化

app-config.xmlには、Quartz Schedulerの初期化が含まれています。

私がアプリケーションを起動すると、2つのQuartz Schedulerスレッドがあり、スケジュールされたすべてのサービスが2回呼び出されます。それは、私がapp-confix.xmlの設定を両方のコンテキストに継承しているからですか?

親configで定義されたbeanは、一度しか初期化されず、その親configを継承するコンテキスト間で共有されると考えました。

アドバイスありがとうございました:)。

my 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

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

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

+0

ありがとう、私はそれを試みます。私は別の奇妙なことを発見した。デバッグモードでeclipse(STS)からこのアプリケーションを直接実行すると、ただ1つのschleduler(Quartz)インスタンスしかありません。同じconfigs、同じtomcatですが、dev環境では1つのBeanインスタンスのみです。 – Peter

関連する問題