簡體   English   中英

Bean生命周期管理Spring Boot

[英]Bean Lifecycle Management Spring Boot

我目前正在嘗試將Spring Boot應用程序部署到外部Tomcat實例中,並且遇到了一些關於如何最好地管理某些事物的實例化的問題。

按照目前的結構,我有類似的東西

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);
}


}

其中BackgroundThread是一個正在為新作業偵聽AMQP類型消息隊列的線程。 我知道Spring提供了一些RabbitMQ方法來實現這一點,但我們並沒有使用Rabbit,所以它沒有幫助。

正在部署的* .war文件的整個目的是通過消息傳遞向線路暴露一些功能,所以我的問題是在Spring的生命周期中實例化,啟動然后銷毀BackgroundThread的最佳方法是什么? XML配置?

來自文檔:

JSR-250 @PostConstruct和@PreDestroy注釋通常被認為是在現代Spring應用程序中接收生命周期回調的最佳實踐。 使用這些注釋意味着您的bean不會耦合到Spring特定的接口。

有關詳細信息,請參見第7.9.8節“@ PostConstruct和@PreDestroy”

這些注釋旨在放在一些init和cleanup方法上:

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

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

也很有用:

每個SpringApplication都會向JVM注冊一個關閉鈎子,以確保在退出時正常關閉ApplicationContext。 可以使用所有標准的Spring生命周期回調(例如DisposableBean接口或@PreDestroy注釋)。

此外,如果bean希望在應用程序結束時返回特定的退出代碼,則bean可以實現org.springframework.boot.ExitCodeGenerator接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM