Skip to content

Commit b8ad953

Browse files
committed
Merge branch '1.3.x
2 parents 91df749 + 68fb578 commit b8ad953

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.springframework.boot.admin.SpringApplicationAdminMXBean;
2323
import org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar;
2424
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2627
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
2728
import org.springframework.context.annotation.Bean;
@@ -34,6 +35,7 @@
3435
* for internal use only.
3536
*
3637
* @author Stephane Nicoll
38+
* @author Andy Wilkinson
3739
* @since 1.3.0
3840
* @see SpringApplicationAdminMXBean
3941
*/
@@ -65,6 +67,7 @@ public SpringApplicationAdminJmxAutoConfiguration(
6567
}
6668

6769
@Bean
70+
@ConditionalOnMissingBean
6871
public SpringApplicationAdminMXBeanRegistrar springApplicationAdminRegistrar()
6972
throws MalformedObjectNameException {
7073
String jmxName = this.environment.getProperty(JMX_NAME_PROPERTY,

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfigurationTests.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
import org.junit.Test;
3131
import org.junit.rules.ExpectedException;
3232

33+
import org.springframework.beans.factory.BeanFactoryUtils;
34+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
35+
import org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar;
3336
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
3437
import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration;
3538
import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration;
@@ -47,6 +50,7 @@
4750
* Tests for {@link SpringApplicationAdminJmxAutoConfiguration}.
4851
*
4952
* @author Stephane Nicoll
53+
* @author Andy Wilkinson
5054
*/
5155
public class SpringApplicationAdminJmxAutoConfigurationTests {
5256

@@ -130,6 +134,37 @@ public void registerWithSimpleWebApp() throws Exception {
130134
assertThat(actual).isEqualTo(String.valueOf(expected));
131135
}
132136

137+
@Test
138+
public void onlyRegisteredOnceWhenThereIsAChildContext() throws Exception {
139+
SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder().web(false)
140+
.sources(JmxAutoConfiguration.class,
141+
SpringApplicationAdminJmxAutoConfiguration.class);
142+
SpringApplicationBuilder childBuilder = parentBuilder
143+
.child(JmxAutoConfiguration.class,
144+
SpringApplicationAdminJmxAutoConfiguration.class)
145+
.web(false);
146+
ConfigurableApplicationContext parent = null;
147+
ConfigurableApplicationContext child = null;
148+
149+
try {
150+
parent = parentBuilder.run("--" + ENABLE_ADMIN_PROP);
151+
child = childBuilder.run("--" + ENABLE_ADMIN_PROP);
152+
BeanFactoryUtils.beanOfType(parent.getBeanFactory(),
153+
SpringApplicationAdminMXBeanRegistrar.class);
154+
this.thrown.expect(NoSuchBeanDefinitionException.class);
155+
BeanFactoryUtils.beanOfType(child.getBeanFactory(),
156+
SpringApplicationAdminMXBeanRegistrar.class);
157+
}
158+
finally {
159+
if (parent != null) {
160+
parent.close();
161+
}
162+
if (child != null) {
163+
child.close();
164+
}
165+
}
166+
}
167+
133168
private ObjectName createDefaultObjectName() {
134169
return createObjectName(DEFAULT_JMX_NAME);
135170
}

0 commit comments

Comments
 (0)