Search code examples
javaxmlspring-bootjmxspring-jmx

Why is Spring Boot 2.5.0 JMX Beans not showing in JConsole


Using Spring Boot 2.1.6.RELEASE for JMX Beans are working correctly or they are shown in Jconsole but in 2.5.0 it does not. The following is my simple application using spring boot 2.5.0.

If you want to try version 2.1.6.RELEASE, just change the spring-boot-starter-parent version to 2.1.6.RELEASE and the JMX Beans will work.

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.IOException;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) throws IOException {
        SpringApplication.run(DemoApplication.class, args);

        System.out.print("Press [ENTER] to quit:");
        System.in.read();
    }
}

JmxEndpoint.java

package com.example.demo;

import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.stereotype.Component;

@Component
@ManagedResource
public class JmxEndpoint {
    @ManagedOperation
    public void printMessage() {
    }
}

Solution

  • Setting spring.jmx.enabled=true in application.properties file is the solution. They have disabled it by default in newer versions including 2.5.0.

    Reference: https://github.com/spring-projects/spring-boot/issues/16090