如何使用 spring 引导在 Jetty 嵌入式服务器中以编程方式启用和公开 jmx bean?

How to enable and expose jmx beans programatically in jetty embedded server using spring boot?

我正在使用一些 REST 控制器开发 Spring 引导应用程序。我想添加 JMX 支持并公开一些 Jetty 的 mbean。

尝试与 jconsole 连接但失败,所以我猜在这种情况下默认禁用 JMX。

问题是:如何在 Spring 引导应用程序(使用 Jetty 作为嵌入式服务器)中启用 Jetty 的 JMX bean。

我明白了。我的解决方案部分基于此 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;
}