使用LifecycleProcessor并启动信号(在@SpringBootApplication中使用@Autowire)

时间:2017-06-09 06:53:16

标签: java spring spring-boot

我有基于Spring Boot的简单应用程序。

在此示例中,我不使用任何XML配置。

主要组件是sendKeys()(使用隐式构造函数自动装配),它取决于实现appMain的{​​{1}}。它会覆盖并定义dataCollector,我希望在创建Spring容器后立即调用它。

根据文件:

“任何Spring管理的对象都可以实现该接口。然后,当ApplicationContext本身接收到启动和停止信号时,例如在运行时停止/重启场景,它会将这些调用级联到该上下文中定义的所有生命周期实现。 “

但是永远不会调用此LifecycleProcessor方法。那么public void start()是必须明确定义并向ApplicationContext发送的东西吗?容器启动时是不是总能完成?我认为它是容器生命周期的一部分,但似乎不是这样。那怎么办?

我需要一些与我的整个应用程序一起启动和停止的并行类似deamon的线程。这个LifecycleProcessor是我应该使用的,还是Spring中有更好的选择?

AppMain

start

DataCollector

start signal

1 个答案:

答案 0 :(得分:0)

如果您需要并行线程用于后台作业,那么您应该创建它。根据您的要求,线程可以是daemon。如果您不需要等到线程完成其工作,您可以将其指定为deamon,并在关闭应用程序后 - 此线程将在没有超时的情况下中断。

示例:

class BackgroundJob extends Thread {
    public BackgroundJob(boolean daemon) {
        setDaemon(daemon);
    }
    //others logic
}