CDI的后台服务

时间:2014-02-18 16:04:45

标签: java cdi

我有一个带有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.
    }
}

1 个答案:

答案 0 :(得分:1)

我个人会使用@ApplicationScoped而不是@Singleton。生命周期将在容器关闭时关闭对象。如果你想启动一个线程,这可能是放置代码的可能选择。

默认情况下它不是异步的,因此您需要自己启动该线程。