我有一个带有CDI / Weld的Java SE应用程序(以org.jboss.weld.environment.se.StartMain
开头,没有任何应用程序服务器)。
在其中启动后台服务的正确方法是什么?
我尝试创建一个观察@Singleton
事件的ContainerInitialized
bean(如下所示),但我不确定容器何时会销毁此服务bean。安全吗?还有更好的方法吗?
@Singleton
public class BackgroundService {
public void onStart(@Observes ContainerInitialized event) {
// starting other threads etc.
}
}
答案 0 :(得分:1)
我个人会使用@ApplicationScoped
而不是@Singleton
。生命周期将在容器关闭时关闭对象。如果你想启动一个线程,这可能是放置代码的可能选择。
默认情况下它不是异步的,因此您需要自己启动该线程。