如何使用全局启用的惰性初始化通过 JMX 使 Spring Boot Actuator 可用?

How to make Spring Boot Actuator available via JMX with globally enabled lazy initialization?

在我们的 Spring 基于 Boot 2.4+ 的应用程序中,我们需要配置初始化应该在 application.properties:

中延迟执行
spring.main.lazy-initialization=true
spring.jmx.enabled=true

然而,使用此类设置无法通过 JMX 到达执行器端点。

当我们迁移到 Instana monitoring 时,这现在是一个障碍,这需要 org.springframework.boot:type=Endpoint,name=Metricsorg.springframework.boot:type=Endpoint,name=Health MBean 可以通过 JMX 获得。

有没有办法保持延迟初始化启用,但在同一个执行器上可以通过 JMX 访问,请问?

这是 Spring 引导中的错误,我刚刚打开 an issue。感谢您提请我们注意。

您可以通过从惰性初始化中排除将端点导出到 JMX 的 bean 来解决该问题。为此,请将以下 bean 添加到您的应用程序中:

@Bean
LazyInitializationExcludeFilter eagerJmxEndpointExport() {
    return LazyInitializationExcludeFilter.forBeanTypes(JmxEndpointExporter.class);
}

这是 Spring Boot 中的错误,此后已在 Spring Boot 2.4.12 and 2.5.6. The fix is also present in versions 2.6.0 及更高版本中修复。升级您的 Spring Boot 版本将解决此问题。

Bug Fixes

  • When lazy initialization is enabled, JMX endpoints are not available #28335