gpt4 book ai didi

java - Bean 生命周期管理 Spring Boot

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:24 24 4
gpt4 key购买 nike

我目前正在尝试将 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配置?

最佳答案

From the docs:

The JSR-250 @PostConstruct and @PreDestroy annotations are generally considered best practice for receiving lifecycle callbacks in a modern Spring application. Using these annotations means that your beans are not coupled to Spring specific interfaces.

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

这些注解应该放在一些初始化和清理方法上:

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

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

也很有用:

Each SpringApplication will register a shutdown hook with the JVM to ensure that the ApplicationContext is closed gracefully on exit. All the standard Spring lifecycle callbacks (such as the DisposableBean interface, or the @PreDestroy annotation) can be used.

In addition, beans may implement the org.springframework.boot.ExitCodeGenerator interface if they wish to return a specific exit code when the application ends.

关于java - Bean 生命周期管理 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39370021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com