使用CDI为方法添加@Readiness和@Liveness注解无效问题排查
问题原因与解决方案
你的问题核心在于:MicroProfile 4.0.1 对应的 MicroProfile Health 3.1 版本,并不支持通过 CDI 生产者方法(@Produces + 健康探针注解)来定义健康检查。这种通过@Produces直接生成HealthCheck实例的写法,是从MicroProfile Health 4.0(对应MicroProfile 5.0)版本才引入的新特性,所以你当前依赖的版本识别不了这种写法。
兼容MicroProfile 4.0.1的替代方案
虽然不能用生产者方法,但可以通过每个健康检查单独实现一个HealthCheck类的方式,来达到“单个方法对应一项检查”的需求,避免在一个call()方法里堆砌多项检查逻辑。示例代码如下:
Liveness检查类
import org.eclipse.microprofile.health.HealthCheck; import org.eclipse.microprofile.health.HealthCheckResponse; import org.eclipse.microprofile.health.Liveness; import javax.enterprise.context.ApplicationScoped; @Liveness @ApplicationScoped public class LiveCheck implements HealthCheck { @Override public HealthCheckResponse call() { return HealthCheckResponse.named("live-check").up().build(); } }
Readiness检查类
import org.eclipse.microprofile.health.HealthCheck; import org.eclipse.microprofile.health.HealthCheckResponse; import org.eclipse.microprofile.health.Readiness; import javax.enterprise.context.ApplicationScoped; @Readiness @ApplicationScoped public class ReadyCheck implements HealthCheck { @Override public HealthCheckResponse call() { return HealthCheckResponse.named("ready-check").up().build(); } }
这种方式和你说的“常规实现类”逻辑一致,但拆分了单个检查到独立类中,既满足了版本兼容性,也实现了你不想在一个方法里处理多项检查的需求。
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

