问题
I have created a Spring Integration application with Spring Boot. I would like to know how to configure JMX with Spring Boot. I believe by default JMX is configured when using Spring Boot Actuator.
Do I need to configure anything else to be able to export MBeans for Spring Integration?
Most of the example I see have the following line in the applicationContext.xml
<context:mbean-export/>
<context:mbean-server/>
My Application.java class looks like this.
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);
}
}
Adding this line to the configuration doesn't seem to export the Spring Integration mbeans
@EnableIntegrationMBeanExport(server = "mbeanServer", defaultDomain="my.company.domain")
I'm referencing this video https://www.youtube.com/watch?v=TetfR7ULnA8
回答1:
As you understand the Spring Integration JMX is enabled by default, if you just have spring-integration-jmx
in the classpath. And, of course, if spring.jmx.enabled = true
(default).
You can't overrride that just declaring one more @EnableIntegrationMBeanExport
, because it is based on @Import
and you just can't override import classes because of (from ConfigurationClassParser
):
imports.addAll(sourceClass.getAnnotationAttributes(Import.class.getName(), "value"));
If imported classes are already there, they aren't overridable.
You have several choices to achieve your requirements:
Disable default Spring Boot JMX - just addind to the
application.properties
spring.jmx.enabled = false
and continue to use@EnableIntegrationMBeanExport
Configure
IntegrationMBeanExporter
@Bean
manually.Just configure your
my.company.domain
domain in theapplication.properties
:spring.jmx.default_domain = my.company.domain
回答2:
It is quite late to add this; but in addition to the endpoints.jmx.domain
I found it useful to change the spring.jmx.default-domain
to someting unique per application
This is with multiple instances of Spring Boot 1.4.1 apps running in Tomcat 7
来源:https://stackoverflow.com/questions/25497372/how-to-configure-jmx-with-spring-boot