2

Maven を使用し、メイン システムと多くのモジュールwarsで構成される Web アプリケーションを構築しています。それぞれが独自のApplicationContext.xml ファイルを持つSpring-3ベースのプロジェクトです。システムとモジュールはwarファイルであり、Maven を使用してレイアウトを使用してそれらをマージします。

最初は、システムアプリケーション コンテキストファイルのみが読み込まれ、システム自体が、別の名前のフォルダーに格納されている各モジュールのアプリケーション コンテキストを読み込みます。WEB-INF/classes/application_context

システムのロード方法は次のとおりです。

ServletContext context = SessionUtils.getServletContext();
ApplicationContext appContext = WebApplicationContextUtils
            .getRequiredWebApplicationContext(context);

そして、これは、システムが残りのアプリケーション コンテキストをロードする作業を実行する方法です。

String filename = "/WEB-INF/classes/application_context";
ServletContext servContext = SessionUtils.getServletContext();
String pathname = servContext.getRealPath(filename);
File dir = new File(pathname);
List<String> contexts = new ArrayList<String>();
for (File child : dir.listFiles()) {
    contexts.add("/application_context/" + child.getName());
}
ApplicationContext context = new ClassPathXmlApplicationContext(
    contexts.toArray(new String[contexts.size()])); 

私の質問は、一度にすべての Spring コンテキストをロードする方法はありますか? ご覧のとおり、 Spring importを実行する可能性がありますが、最初はシステムのアプリケーション コンテキストはモジュールのものについて何も知りません。また、Maven を使用してすべてのアプリケーション コンテキストを 1 つだけにマージすることもできますが、その場合の正確な使用方法がわかりません。xslt ファイルを作成する必要がありますか? 私はいくつかの簡単な方法が欲しいです。

4

1 に答える 1

2

コンテキスト パスを指定するときに、ワイルドカードを使用できます。例えば:

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:conf/*-Context.xml");

セクションを見てください: 5.7.2 アプリケーション コンテキスト コンストラクター リソース パスのワイルドカード

メイン コンテキストでワイルドカードを使用することもできるため、サーバー コンテキストが読み込まれると、そのワイルドカードに含まれるすべてのものも読み込まれます。これにより、サーバーの起動時に全負荷を達成できます。

<import resource="classpath:application_context/ApplicationContext*.xml" />

于 2013-01-15T10:20:29.797 に答える