2016-09-02 4 views
0

Tomcatのwebappフォルダに.warをスローすると、静的変数の初期化が必要なWebアプリケーションがあります。この初期化では、初期設定を取得するために@Serviceを呼び出す必要があります。Webアプリケーションの初期化でSpring @Serviceを呼び出す

私は私のGUIアプリのコンテナ内の.warを投げた後、私の春のWebアプリケーションを初期化するための最良の方法は何

サービスを呼び出しているとき@Autowire注入のみ動作することを実現?この初期化は一度だけ実行する必要があります。

+1

@PostConstructはあなた –

+0

http://stackoverflow.com/questions/17557214/run-code-once-spring-app-is-succesfully-deployed – amicoderozer

+0

@JekinKalariyaを助けるかもしれないが、PostConstructと私は必要があります。私のイニシャライザを私の豆と結びつけるために...私のイニシャライザは、アプリケーション内のビジネスやコンポーネントから独立したものです...私は一度実行される "メイン"メソッドのように、サーバーなどに) – Jaabax

答えて

1

servletContextが初期化された後に何かをする必要がある場合は、春にApplicationListenerを使用してこれを行います。 otherhandで

public class SpringListener implements ApplicationListener<ContextRefreshedEvent>{ 

     // this should work if other setting is right 
     @Autowired 
     XXX xxx; 

     public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { 
       // do things here 
     } 
    } 

in application.xml 
<bean id="eventListenerBean" class="package.name.SpringListener " /> 

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#context-functionality-events

、ちょうどFYI、伝統的な方法は、のServletContextListenerを使用して、それを行うことです。 initメソッドに http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html

+0

私は私のイニシャライザが私の豆のいずれかに結びついて欲しくないので、良いアプローチと思われる...と私は作成したくないこのために@エンティティ/リポジトリ/サービス...私の初期化子が行う唯一のことは@Entiの.classを取ることですクラスパスに結びつき、静的変数に格納します(後の画面はこれらのクラスで自動的に生成されるため) – Jaabax

+0

それがあなたを助けてくれてうれしいです。 contextRefreshedEventが不正な設定で2回呼び出されることがあります。ここでは解決策です。 http://stackoverflow.com/questions/6164573/why-is-my-spring-contextrefreshed-event-called-twice –

+0

必要な場合に備えて。 :) –

関連する問題