Skip to content

Commit 3fe0b84

Browse files
committed
Make HealthMvcEndpoint conditional on missing bean
1 parent 9e2d54f commit 3fe0b84

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcManagementContextConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ public HeapdumpMvcEndpoint heapdumpMvcEndpoint() {
158158

159159
@Bean
160160
@ConditionalOnBean(HealthEndpoint.class)
161+
@ConditionalOnMissingBean
161162
@ConditionalOnEnabledEndpoint("health")
162163
public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate,
163164
ManagementServerProperties managementServerProperties) {

spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthMvcEndpointAutoConfigurationTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure;
1818

19+
import java.security.Principal;
1920
import java.util.Arrays;
2021

22+
import javax.servlet.http.HttpServletRequest;
23+
2124
import org.junit.After;
2225
import org.junit.Test;
2326

27+
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
2428
import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint;
2529
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
2630
import org.springframework.boot.actuate.health.Health;
@@ -100,6 +104,18 @@ public void testSetRoles() throws Exception {
100104
.isEqualTo(Arrays.asList("super"));
101105
}
102106

107+
@Test
108+
public void endpointConditionalOnMissingBean() throws Exception {
109+
this.context = new AnnotationConfigWebApplicationContext();
110+
this.context.setServletContext(new MockServletContext());
111+
this.context.register(TestConfiguration.class, TestHealthMvcEndpointConfiguration.class);
112+
this.context.refresh();
113+
MockHttpServletRequest request = new MockHttpServletRequest();
114+
Health health = (Health) this.context.getBean(HealthMvcEndpoint.class)
115+
.invoke(request, null);
116+
assertThat(health.getDetails()).isNotEmpty();
117+
}
118+
103119
@Configuration
104120
@ImportAutoConfiguration({ SecurityAutoConfiguration.class,
105121
JacksonAutoConfiguration.class, WebMvcAutoConfiguration.class,
@@ -115,6 +131,31 @@ public TestHealthIndicator testHealthIndicator() {
115131

116132
}
117133

134+
@Configuration
135+
@ImportAutoConfiguration({ SecurityAutoConfiguration.class,
136+
JacksonAutoConfiguration.class, WebMvcAutoConfiguration.class,
137+
HttpMessageConvertersAutoConfiguration.class, AuditAutoConfiguration.class,
138+
EndpointAutoConfiguration.class, EndpointWebMvcAutoConfiguration.class })
139+
static class TestHealthMvcEndpointConfiguration {
140+
141+
@Bean
142+
public HealthMvcEndpoint endpoint(HealthEndpoint endpoint) {
143+
return new TestHealthMvcEndpoint(endpoint);
144+
}
145+
}
146+
147+
static class TestHealthMvcEndpoint extends HealthMvcEndpoint {
148+
149+
TestHealthMvcEndpoint(HealthEndpoint delegate) {
150+
super(delegate);
151+
}
152+
153+
@Override
154+
protected boolean exposeHealthDetails(HttpServletRequest request, Principal principal) {
155+
return true;
156+
}
157+
}
158+
118159
static class TestHealthIndicator extends AbstractHealthIndicator {
119160

120161
@Override

0 commit comments

Comments
 (0)