Helidon MP / Microprofile 的启动/关闭挂钩?

Tha*_*asu 2 cdi microprofile helidon

我正在使用 Helidon MP 开发微服务应用程序。到目前为止我的经历非常棒。但我最终寻找 Helidon MP 的启动/关闭挂钩。我试图通过搜索和 Helidon Javadoc 来查找。但我找不到任何有用的东西。

Helidon MP / Microprofile 是否提供此类功能?

Lai*_*son 7

如果您使用 Helidon MP,那么您实际上就是在使用 CDI 2.0。所以这个问题简化为:“有没有办法在 CDI 容器启动和关闭时收到通知?”

@ApplicationScoped如果您有一个 CDI bean(通常用或@Dependent或注释@RequestScoped),那么您可以向其中添加一个观察者方法,当初始化或销毁由特定范围注释(例如 )表示的上下文时,该方法会收到通知。ApplicationScoped应用程序作用域的初始化几乎就是您想要的,因为它大致相当于“应用程序启动时”,因此您可以在任何 CDI 应用程序(包括 Helidon MP)中执行此操作:

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Initialized;
import javax.enterprise.event.Observes;

private final void onStartup(@Observes @Initialized(ApplicationScoped.class) final Object event) {
  // Do what you want; the CDI container has come up and everything
  // is open for business
}
Run Code Online (Sandbox Code Playgroud)

如果你想在一切崩溃之前知道,你可以这样做:

private final void rightBeforeShutdown(@Observes @BeforeDestroyed(ApplicationScoped.class) final Object event) {
  // Do what you want; the CDI container is just about to go down
}
Run Code Online (Sandbox Code Playgroud)

请注意,正如规范中记录的那样,观察者方法可以命名为您喜欢的任何名称,必须有一个用 注释的参数@Observes,通常返回void并且可以具有任何保护级别。