From bbb29dd70f2f94550500bfe5bc81d62ba27f91cb Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 7 Jul 2016 15:36:02 +0200 Subject: [PATCH] Remove `@Primary` from `IntegrationMBeanExporter` Commit 3ea84f9e1 has wrongly introduced a `@Primary` marker on `IntegrationMBeanExporter` so any use of both Spring's JMX support and Spring Integration's JMX support leads to an exception. This commit makes sure to remove the unnecessary `@Primary` Closes gh-6328 --- .../IntegrationAutoConfiguration.java | 2 -- .../IntegrationAutoConfigurationTests.java | 33 ++++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java index dff6b3ebe76..7bee106b3b1 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfiguration.java @@ -33,7 +33,6 @@ import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.integration.config.EnableIntegration; import org.springframework.integration.jmx.config.EnableIntegrationMBeanExport; @@ -87,7 +86,6 @@ public class IntegrationAutoConfiguration { } @Bean - @Primary public IntegrationMBeanExporter integrationMbeanExporter() { IntegrationMBeanExporter exporter = new IntegrationMBeanExporter(); String defaultDomain = this.propertyResolver.getProperty("default-domain"); diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java index 750fec7ff42..f952888277c 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/integration/IntegrationAutoConfigurationTests.java @@ -27,11 +27,17 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.integration.support.channel.HeaderChannelRegistry; +import org.springframework.jmx.export.MBeanExporter; import org.springframework.test.context.support.TestPropertySourceUtils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.mock; /** * Tests for {@link IntegrationAutoConfiguration}. @@ -99,6 +105,13 @@ public class IntegrationAutoConfigurationTests { "org.springframework.integration.monitor"); } + @Test + public void primaryExporterIsAllowed() { + load(CustomMBeanExporter.class); + assertEquals(2, this.context.getBeansOfType(MBeanExporter.class).size()); + assertSame(this.context.getBean("myMBeanExporter"), this.context.getBean(MBeanExporter.class)); + } + private static void assertDomains(MBeanServer mBeanServer, boolean expected, String... domains) { List actual = Arrays.asList(mBeanServer.getDomains()); @@ -107,12 +120,30 @@ public class IntegrationAutoConfigurationTests { } } - private void load(String... environment) { + public void load(String... environment) { + load(null, environment); + } + + private void load(Class config, String... environment) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + if (config != null) { + ctx.register(config); + } TestPropertySourceUtils.addInlinedPropertiesToEnvironment(ctx, environment); ctx.register(JmxAutoConfiguration.class, IntegrationAutoConfiguration.class); ctx.refresh(); this.context = ctx; } + @Configuration + static class CustomMBeanExporter { + + @Bean + @Primary + public MBeanExporter myMBeanExporter() { + return mock(MBeanExporter.class); + } + + } + }