2016-09-07 20 views
3

現在、私はSpringブートアプリケーションを外部のTomcatインスタンスにデプロイしようとしていますが、特定のもののインスタンス化を最適に管理する方法に関するいくつかの質問に就いています。Beanライフサイクル管理スプリングブート

は、同様に、現在、私はBackgroundThreadは、新しい仕事のためにAMQP型メッセージング・キューに待機しているスレッドである

public class MyClass extends SpringBootServletInitializer{ 


@Bean 
public ThreadPool pool(){ 
    return new ThreadPool(); 
} 

@Bean 
public BackgroundThread setupInbox() { 
    BackgroundThread inbox = new BackgroundThread(pool()); 
    inbox.start(); 
    return inbox; 
} 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(MyClass.class); 
} 

public static void main(String[] args) throws Exception { 
    SpringApplication.run(MyClass.class, args); 
} 


} 

の線に沿って何かを持っている構造。私はSpringがこれを行ういくつかのRabbitMQ方法を提供していることを知っていますが、私たちはRabbitをこれに使用していないので、それは役に立たない。

配布されているこの* .warファイルの目的は、メッセージングを通じていくつかの機能をワイヤに公開することです。私の質問は、BackgroundThreadのインスタンス化、起動、破棄の最善の方法です春? XML構成ですか?

+0

いくつかのSpringコンテキストライフサイクルイベントを聞き、それらのスレッドを管理しますか? – jahra

答えて

3

From the docs:

JSR-250 @PostConstructと@PreDestroy注釈は、一般的に近代的なSpringアプリケーションにおけるライフサイクルコールバックを受信するためのベストプラクティスと考えています。これらのアノテーションを使用すると、BeanがSpring固有のインタフェースに結合されていないことを意味します。

For details see Section 7.9.8, “@PostConstruct and @PreDestroy”

これらの注釈は、いくつかのinitとクリーンアップ方法に置かれることを意図されています

また
@PostConstruct 
public void initAfterStartup() { 
    ... 
} 

@PreDestroy 
public void cleanupBeforeExit() { 
    ... 
} 

便利:

各SpringApplicationはとシャットダウンフックを登録しますJVMを使用して、終了時にApplicationContextが正常に終了するようにします。すべての標準Springライフサイクルコールバック(DisposableBeanインターフェイスや@PreDestroyアノテーションなど)を使用できます。

さらに、Beanは、アプリケーション終了時に特定の終了コードを返す場合は、org.springframework.boot.ExitCodeGeneratorインターフェイスを実装できます。

関連する問題