如何使用全局启用的惰性初始化通过 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=Metrics
和 org.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
在我们的 Spring 基于 Boot 2.4+ 的应用程序中,我们需要配置初始化应该在 application.properties
:
spring.main.lazy-initialization=true
spring.jmx.enabled=true
然而,使用此类设置无法通过 JMX 到达执行器端点。
当我们迁移到 Instana monitoring 时,这现在是一个障碍,这需要 org.springframework.boot:type=Endpoint,name=Metrics
和 org.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