如何使用 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;
}
我正在使用一些 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;
}