From 3fe0b844a61c072725b98b7d0d6eacd12b9dd5f9 Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Mon, 17 Apr 2017 14:37:38 -0700 Subject: [PATCH] Make HealthMvcEndpoint conditional on missing bean --- ...tWebMvcManagementContextConfiguration.java | 1 + ...althMvcEndpointAutoConfigurationTests.java | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcManagementContextConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcManagementContextConfiguration.java index c55e0ff640f..c7d30a745c0 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcManagementContextConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcManagementContextConfiguration.java @@ -158,6 +158,7 @@ public class EndpointWebMvcManagementContextConfiguration { @Bean @ConditionalOnBean(HealthEndpoint.class) + @ConditionalOnMissingBean @ConditionalOnEnabledEndpoint("health") public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate, ManagementServerProperties managementServerProperties) { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthMvcEndpointAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthMvcEndpointAutoConfigurationTests.java index 40e03d46320..1bf606ee957 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthMvcEndpointAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthMvcEndpointAutoConfigurationTests.java @@ -16,11 +16,15 @@ package org.springframework.boot.actuate.autoconfigure; +import java.security.Principal; import java.util.Arrays; +import javax.servlet.http.HttpServletRequest; + import org.junit.After; import org.junit.Test; +import org.springframework.boot.actuate.endpoint.HealthEndpoint; import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint; import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; @@ -100,6 +104,18 @@ public class HealthMvcEndpointAutoConfigurationTests { .isEqualTo(Arrays.asList("super")); } + @Test + public void endpointConditionalOnMissingBean() throws Exception { + this.context = new AnnotationConfigWebApplicationContext(); + this.context.setServletContext(new MockServletContext()); + this.context.register(TestConfiguration.class, TestHealthMvcEndpointConfiguration.class); + this.context.refresh(); + MockHttpServletRequest request = new MockHttpServletRequest(); + Health health = (Health) this.context.getBean(HealthMvcEndpoint.class) + .invoke(request, null); + assertThat(health.getDetails()).isNotEmpty(); + } + @Configuration @ImportAutoConfiguration({ SecurityAutoConfiguration.class, JacksonAutoConfiguration.class, WebMvcAutoConfiguration.class, @@ -115,6 +131,31 @@ public class HealthMvcEndpointAutoConfigurationTests { } + @Configuration + @ImportAutoConfiguration({ SecurityAutoConfiguration.class, + JacksonAutoConfiguration.class, WebMvcAutoConfiguration.class, + HttpMessageConvertersAutoConfiguration.class, AuditAutoConfiguration.class, + EndpointAutoConfiguration.class, EndpointWebMvcAutoConfiguration.class }) + static class TestHealthMvcEndpointConfiguration { + + @Bean + public HealthMvcEndpoint endpoint(HealthEndpoint endpoint) { + return new TestHealthMvcEndpoint(endpoint); + } + } + + static class TestHealthMvcEndpoint extends HealthMvcEndpoint { + + TestHealthMvcEndpoint(HealthEndpoint delegate) { + super(delegate); + } + + @Override + protected boolean exposeHealthDetails(HttpServletRequest request, Principal principal) { + return true; + } + } + static class TestHealthIndicator extends AbstractHealthIndicator { @Override