【问题标题】:How to enable and expose jmx beans programatically in jetty embedded server using spring boot?如何使用spring boot在jetty嵌入式服务器中以编程方式启用和公开jmx bean?
【发布时间】:2019-12-14 18:44:02
【问题描述】:
我正在使用一些 REST 控制器开发 Spring Boot 应用程序。我想添加 JMX 支持并公开一些 Jetty 的 mbean。
尝试连接 jconsole 但失败了,所以我猜这种情况下 JMX 默认是禁用的。
问题是:如何在 Spring Boot 应用程序中启用 Jetty 的 JMX bean(将 Jetty 作为嵌入式服务器)。
【问题讨论】:
标签:
java
spring-boot
jetty
jmx
embedded-jetty
【解决方案1】:
我想通了。我的解决方案部分基于此doc。在 Spring Boot 中,可以通过添加自定义服务器定制器来为 Jetty 添加 JMX 支持。你需要做的就是添加这样的bean:
@Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(@Value("${server.port:8080}") final String port) {
JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory(Integer.valueOf(port));
factory.addServerCustomizers(server -> {
// Setup JMX
MBeanContainer mbContainer=new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
server.addEventListener(mbContainer);
server.addBean(mbContainer);
server.addBean(Log.getLog());
});
return factory;
}