スタンドアロンの Spring アプリケーションを Spring MVC アプリに変換または統合する。
次の構造を持つSpring MVCアプリケーションがあります
myApp
|- META-INF
|- WEB-INF
|-classes
|-com
|-controllers
|-service
|-lib
|-UserLibrary.jar
|-META-INF
|-applicationContext.xml
|-dbre.xml
|-ehcache.xml
|-DataSource.xml
|-Jpa.xml
|-SpringDataJpa.xml
|-applicationContext.xml
|-myApp-servlet.xml
Spring MVC は、通常のプロセスに従ってロードされます。つまり、コントローラには@Controllers、サービスには@Serviceなどの注釈が付けられます。
userLibrary.jar以前は、独自の Spring/JPA 構成を持つスタンドアロンの Spring アプリケーションでした。MVC アプリケーションに統合できるように変換されました。独自の構成ファイル (合計で約 7 個)、独自の Hibernate/JPA エンティティ マネージャーなどがあります。
Spring MVC アプリケーションで使用するために、WebApplicationContext の初期化が完了したときに UserLibrary アプリケーションのアプリケーション コンテキストをロードするように、サービス クラスにわずかな変更を加えました。
public class MyAppService implements
ApplicationListener<ContextRefreshedEvent> {
protected UserLibraryService service;
--
-- several service methods etc
--
System.getProperty("username", "userA");
System.getProperty("password", "userB");
@Override
public void onApplicationEvent(ContextRefreshedEvent arg0) {
ApplicationContext context =
new ClassPathXmlApplicationContext("META-INF/userLibrary.xml");
service = context.getBean(UserLibrary.class);
}
}
上記のアプローチによりWebApplicationContext、MVC アプリケーション用とApplicationContextUserLibrary アプリケーション用の 2 つのコンテナーが作成されます。上記は正しい/最善の方法ではないと思うので、最善の方法についてアドバイスを求めています。たとえば、2 つではなく 1 つのコンテナーを使用できますか?
アップデート:
これが私が試したことです。MVC アプリケーションのUserLibraryからアプリケーションの構成ファイルをインポートしました。applicationContext.xml
<import resource="classpath:META-INF/applicationContext.xml" />
UserLibraryBean次に、MVC アプリケーションのapplicationContext.xmlファイル (インポート ステートメントを含む同じファイル)に を追加しました。
<bean class="com.service.UserLibraryService"/>
いくつかの質問:
- 更新されたアプローチは 1 つのコンテナーのみを使用しますか、それとも 2 つのコンテナーを引き続き使用しますか?
UserLibraryService は、初期化中に次のプロパティを読み取ります
System.getProperty("ユーザー名"); System.getProperty("パスワード");
私の元の例では、onApplicationEventメソッドで上記の値を設定し、UserLibrayそれらを読み取ることができます。
これらはもう設定されていないように見えるため、UserLibraryアプリケーションからプロパティが設定されていないというエラーが表示されます。Service クラスのコンストラクターでも設定しようとしましたが、まだ設定されていません。
xml ファイルの Bean 定義の一部としてシステム プロパティを設定する方法はありますか? プロパティをサービス オブジェクトで使用できるようにするには、どこでプロパティを設定できますか?
ありがとう