スタンドアロンの 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 アプリケーション用とApplicationContext
UserLibrary アプリケーション用の 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 定義の一部としてシステム プロパティを設定する方法はありますか? プロパティをサービス オブジェクトで使用できるようにするには、どこでプロパティを設定できますか?
ありがとう