From 1a3f08d7729aef6009e8f29d4ef321ff5a14ddb3 Mon Sep 17 00:00:00 2001 From: artsiom Date: Fri, 3 Aug 2018 00:45:11 +0300 Subject: [PATCH] Add global support for JMX unique names See gh-13990 --- .../boot/autoconfigure/jmx/JmxAutoConfiguration.java | 6 ++++++ .../META-INF/additional-spring-configuration-metadata.json | 6 ++++++ .../boot/autoconfigure/jmx/JmxAutoConfigurationTests.java | 4 ++++ .../src/main/asciidoc/appendix-application-properties.adoc | 1 + 4 files changed, 17 insertions(+) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.java index 7c68d99d5da..99b31a66d7a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.java @@ -49,6 +49,7 @@ import org.springframework.util.StringUtils; * * @author Christian Dupuis * @author Madhura Bhave + * @author Artsiom Yudovin */ @Configuration @ConditionalOnClass({ MBeanExporter.class }) @@ -93,6 +94,11 @@ public class JmxAutoConfiguration implements EnvironmentAware, BeanFactoryAware if (StringUtils.hasLength(defaultDomain)) { namingStrategy.setDefaultDomain(defaultDomain); } + + boolean uniqueName = this.environment.getProperty("spring.jmx.unique-names", + Boolean.class, false); + namingStrategy.setEnsureUniqueRuntimeObjectNames(uniqueName); + return namingStrategy; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index ca4e754d7d0..4bf7b6b7475 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -290,6 +290,12 @@ "description": "MBeanServer bean name.", "defaultValue": "mbeanServer" }, + { + "name": "spring.jmx.unique-names", + "type": "java.lang.Boolean", + "description": "Whether to ensure that ObjectNames are modified in case of conflict.", + "defaultValue": false + }, { "name": "spring.jpa.open-in-view", "defaultValue": true diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java index fd9f3ae8374..a5e7c967020 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jmx/JmxAutoConfigurationTests.java @@ -42,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link JmxAutoConfiguration}. * * @author Christian Dupuis + * @author Artsiom Yudovin */ public class JmxAutoConfigurationTests { @@ -92,6 +93,7 @@ public class JmxAutoConfigurationTests { MockEnvironment env = new MockEnvironment(); env.setProperty("spring.jmx.enabled", "true"); env.setProperty("spring.jmx.default-domain", "my-test-domain"); + env.setProperty("spring.jmx.unique-names", "true"); this.context = new AnnotationConfigApplicationContext(); this.context.setEnvironment(env); this.context.register(TestConfiguration.class, JmxAutoConfiguration.class); @@ -102,6 +104,8 @@ public class JmxAutoConfigurationTests { .getField(mBeanExporter, "namingStrategy"); assertThat(ReflectionTestUtils.getField(naming, "defaultDomain")) .isEqualTo("my-test-domain"); + assertThat(ReflectionTestUtils.getField(naming, "ensureUniqueRuntimeObjectNames")) + .isEqualTo(true); } @Test diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 45a61187177..2d2f8d9c28a 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -100,6 +100,7 @@ content into your application. Rather, pick only the properties that you need. spring.jmx.default-domain= # JMX domain name. spring.jmx.enabled=true # Expose management beans to the JMX domain. spring.jmx.server=mbeanServer # MBeanServer bean name. + spring.jmx.unique-names=false # Set if unique runtime object names should be ensured. # Email ({sc-spring-boot-autoconfigure}/mail/MailProperties.{sc-ext}[MailProperties]) spring.mail.default-encoding=UTF-8 # Default MimeMessage encoding.