From b16a973d6a04d221a7f572e30ad2444191f81b28 Mon Sep 17 00:00:00 2001 From: Josh Thornhill Date: Mon, 27 Apr 2015 18:02:23 -0400 Subject: [PATCH] Honor the endpoint.enabled property when registering MBeans Fixes gh-2873 Closes gh-2890 --- .../endpoint/jmx/EndpointMBeanExporter.java | 5 +-- .../jmx/EndpointMBeanExporterTests.java | 34 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporter.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporter.java index cdcceca3af3..6181539867f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporter.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporter.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2014 the original author or authors. + * Copyright 2013-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -138,7 +138,8 @@ public class EndpointMBeanExporter extends MBeanExporter implements SmartLifecyc protected void locateAndRegisterEndpoints() { Map endpoints = this.beanFactory.getBeansOfType(Endpoint.class); for (Map.Entry endpointEntry : endpoints.entrySet()) { - if (!this.registeredEndpoints.contains(endpointEntry.getValue())) { + if (!this.registeredEndpoints.contains(endpointEntry.getValue()) + && endpointEntry.getValue().isEnabled()) { registerEndpoint(endpointEntry.getKey(), endpointEntry.getValue()); this.registeredEndpoints.add(endpointEntry.getValue()); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporterTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporterTests.java index 88eec13e078..4f11375cf8d 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporterTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 the original author or authors. + * Copyright 2013-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,9 @@ import org.springframework.jmx.support.ObjectNameManager; import org.springframework.util.ObjectUtils; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * Tests for {@link EndpointMBeanExporter} @@ -73,6 +75,36 @@ public class EndpointMBeanExporterTests { assertEquals(3, mbeanInfo.getAttributes().length); } + @Test + public void testSkipRegistrationOfDisabledEndpoint() throws Exception { + this.context = new GenericApplicationContext(); + this.context.registerBeanDefinition("endpointMbeanExporter", + new RootBeanDefinition(EndpointMBeanExporter.class)); + MutablePropertyValues mvp = new MutablePropertyValues(); + mvp.add("enabled", Boolean.FALSE); + this.context.registerBeanDefinition("endpoint1", new RootBeanDefinition( + TestEndpoint.class, null, mvp)); + this.context.refresh(); + MBeanExporter mbeanExporter = this.context.getBean(EndpointMBeanExporter.class); + assertFalse(mbeanExporter.getServer().isRegistered( + getObjectName("endpoint1", this.context))); + } + + @Test + public void testRegistrationOfEnabledEndpoint() throws Exception { + this.context = new GenericApplicationContext(); + this.context.registerBeanDefinition("endpointMbeanExporter", + new RootBeanDefinition(EndpointMBeanExporter.class)); + MutablePropertyValues mvp = new MutablePropertyValues(); + mvp.add("enabled", Boolean.TRUE); + this.context.registerBeanDefinition("endpoint1", new RootBeanDefinition( + TestEndpoint.class, null, mvp)); + this.context.refresh(); + MBeanExporter mbeanExporter = this.context.getBean(EndpointMBeanExporter.class); + assertTrue(mbeanExporter.getServer().isRegistered( + getObjectName("endpoint1", this.context))); + } + @Test public void testRegistrationTwoEndpoints() throws Exception { this.context = new GenericApplicationContext();