sch*_*e92 6 java spring tomcat
我目前正在尝试将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);
}
}
Run Code Online (Sandbox Code Playgroud)
其中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() {
...
}
Run Code Online (Sandbox Code Playgroud)
也有用:
每个SpringApplication都会向JVM注册一个关闭钩子,以确保ApplicationContext在退出时正常关闭。可以使用所有标准的Spring生命周期回调(例如DisposableBean接口或@PreDestroy批注)。
另外,如果bean希望在应用程序结束时返回特定的退出代码,则可以实现org.springframework.boot.ExitCodeGenerator接口。
| 归档时间: |
|
| 查看次数: |
8349 次 |
| 最近记录: |