[英]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.