我用Spring Boot创建了一个Spring Integration应用程序。我想知道如何使用Spring Boot配置JMX。我相信默认情况下使用Spring Boot Actuator时会配置JMX。
我是否需要配置其他任何能够为Spring Integration导出MBean的内容?
我看到的大多数示例在applicationContext.xml
中都有以下行<context:mbean-export/>
<context:mbean-server/>
我的Application.java类看起来像这样。
package com.jbhunt.app.consumerappointmentintegration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ComponentScan
@EnableAutoConfiguration
@ImportResource("classpath:META-INF/spring/integration/spring-integration-context.xml")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
将此行添加到配置似乎不会导出Spring Integration mbeans
@EnableIntegrationMBeanExport(server = "mbeanServer", defaultDomain="my.company.domain")
答案 0 :(得分:18)
如您所知,Spring Integration JMX默认启用,如果您在类路径中只有spring-integration-jmx
。当然,如果spring.jmx.enabled = true
(默认)。
您无法覆盖仅宣布一个@EnableIntegrationMBeanExport
,因为它基于@Import
而您因为(来自ConfigurationClassParser
)而无法覆盖导入类:< / p>
imports.addAll(sourceClass.getAnnotationAttributes(Import.class.getName(), "value"));
如果导入的类已经存在,则它们不可覆盖。
您有多种选择来满足您的要求:
禁用默认的Spring Boot JMX - 只需添加到application.properties
spring.jmx.enabled = false
并继续使用@EnableIntegrationMBeanExport
手动配置IntegrationMBeanExporter
@Bean
。
只需在my.company.domain
application.properties
域名即可
spring.jmx.default_domain = my.company.domain
答案 1 :(得分:3)
添加此内容已经很晚了;但除了endpoints.jmx.domain
之外,我发现将spring.jmx.default-domain
更改为每个应用程序的独特内容非常有用
这是在Tomcat 7中运行的多个Spring Boot 1.4.1应用程序实例