Helidon MP / Microprofile 的启动/关闭挂钩?
Startup / Shutdown Hook for Helidon MP / Microprofile?
我正在使用 Helidon MP 开发微服务应用程序。到目前为止,我的经历非常棒。但我最终还是在寻找 Helidon MP 的启动/关闭挂钩。我试图通过搜索和 Helidon Javadoc 找到。但是我找不到任何有用的东西。
Helidon MP / Microprofile 是否提供此类功能?
如果您使用的是 Helidon MP,那么您使用的是 CDI 2.0 under the covers。所以这个问题简化为:“有没有办法在 CDI 容器启动和关闭时收到通知?”
如果你有一个 CDI bean(通常用 @ApplicationScoped
或 @Dependent
或 @RequestScoped
注释的东西),那么你可以添加一个 observer method to it that is notified when the context denoted by a particular scope annotation (such as 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
}
如果您想在一切都崩溃之前知道,您可以这样做:
private final void rightBeforeShutdown(@Observes @BeforeDestroyed(ApplicationScoped.class) final Object event) {
// Do what you want; the CDI container is just about to go down
}
请注意 as documented in the specification observer methods may be named anything you like, must have one parameter annotated with @Observes
,通常 return void
并且可以是任何保护级别。
我正在使用 Helidon MP 开发微服务应用程序。到目前为止,我的经历非常棒。但我最终还是在寻找 Helidon MP 的启动/关闭挂钩。我试图通过搜索和 Helidon Javadoc 找到。但是我找不到任何有用的东西。
Helidon MP / Microprofile 是否提供此类功能?
如果您使用的是 Helidon MP,那么您使用的是 CDI 2.0 under the covers。所以这个问题简化为:“有没有办法在 CDI 容器启动和关闭时收到通知?”
如果你有一个 CDI bean(通常用 @ApplicationScoped
或 @Dependent
或 @RequestScoped
注释的东西),那么你可以添加一个 observer method to it that is notified when the context denoted by a particular scope annotation (such as 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
}
如果您想在一切都崩溃之前知道,您可以这样做:
private final void rightBeforeShutdown(@Observes @BeforeDestroyed(ApplicationScoped.class) final Object event) {
// Do what you want; the CDI container is just about to go down
}
请注意 as documented in the specification observer methods may be named anything you like, must have one parameter annotated with @Observes
,通常 return void
并且可以是任何保护级别。