Commit 86cd7275 authored by Madhura Bhave's avatar Madhura Bhave

MVC endpoints bean methods are @ConditionalOnMissingBean

Fixes gh-10105
parent beb257f4
......@@ -111,8 +111,9 @@ public class EndpointWebMvcHypermediaManagementContextConfiguration {
};
}
@ConditionalOnEnabledEndpoint("actuator")
@Bean
@ConditionalOnEnabledEndpoint("actuator")
@ConditionalOnMissingBean
public HalJsonMvcEndpoint halJsonMvcEndpoint(
ManagementServletContext managementServletContext,
ResourceProperties resources, ResourceLoader resourceLoader) {
......@@ -137,6 +138,7 @@ public class EndpointWebMvcHypermediaManagementContextConfiguration {
static class DocsMvcEndpointConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnEnabledEndpoint("docs")
@ConditionalOnResource(resources = "classpath:/META-INF/resources/spring-boot-actuator/docs/index.html")
public DocsMvcEndpoint docsMvcEndpoint(
......
......@@ -143,6 +143,7 @@ public class EndpointWebMvcManagementContextConfiguration {
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(EnvironmentEndpoint.class)
@ConditionalOnEnabledEndpoint("env")
public EnvironmentMvcEndpoint environmentMvcEndpoint(EnvironmentEndpoint delegate) {
......@@ -173,6 +174,7 @@ public class EndpointWebMvcManagementContextConfiguration {
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(LoggersEndpoint.class)
@ConditionalOnEnabledEndpoint("loggers")
public LoggersMvcEndpoint loggersMvcEndpoint(LoggersEndpoint delegate) {
......@@ -180,6 +182,7 @@ public class EndpointWebMvcManagementContextConfiguration {
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(MetricsEndpoint.class)
@ConditionalOnEnabledEndpoint("metrics")
public MetricsMvcEndpoint metricsMvcEndpoint(MetricsEndpoint delegate) {
......@@ -187,6 +190,7 @@ public class EndpointWebMvcManagementContextConfiguration {
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnEnabledEndpoint("logfile")
@Conditional(LogFileCondition.class)
public LogFileMvcEndpoint logfileMvcEndpoint() {
......@@ -194,6 +198,7 @@ public class EndpointWebMvcManagementContextConfiguration {
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ShutdownEndpoint.class)
@ConditionalOnEnabledEndpoint(value = "shutdown", enabledByDefault = false)
public ShutdownMvcEndpoint shutdownMvcEndpoint(ShutdownEndpoint delegate) {
......@@ -201,6 +206,7 @@ public class EndpointWebMvcManagementContextConfiguration {
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(AuditEventRepository.class)
@ConditionalOnEnabledEndpoint("auditevents")
public AuditEventsMvcEndpoint auditEventMvcEndpoint(
......
......@@ -45,6 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link EndpointWebMvcHypermediaManagementContextConfiguration}.
*
* @author Andy Wilkinson
* @author Madhura Bhave
*/
public class EndpointWebMvcHypermediaManagementContextConfigurationTests {
......@@ -112,7 +113,38 @@ public class EndpointWebMvcHypermediaManagementContextConfigurationTests {
.isEqualTo("http://localhost/docs/#spring_boot_actuator__{rel}");
}
@Test
public void halJsonMvcEndpointIsConditionalOnMissingBean() throws Exception {
createContext();
this.context.register(HalJsonConfiguration.class, TestConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
EndpointWebMvcHypermediaManagementContextConfiguration.class);
this.context.refresh();
HalJsonMvcEndpoint bean = this.context.getBean(HalJsonMvcEndpoint.class);
assertThat(bean).isInstanceOf(TestHalJsonMvcEndpoint.class);
}
@Test
public void docsMvcEndpointIsConditionalOnMissingBean() throws Exception {
createContext();
this.context.register(DocsConfiguration.class, TestConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
EndpointWebMvcHypermediaManagementContextConfiguration.class);
this.context.refresh();
DocsMvcEndpoint bean = this.context.getBean(DocsMvcEndpoint.class);
assertThat(bean).isInstanceOf(TestDocsMvcEndpoint.class);
}
private void load(String... properties) {
createContext();
EnvironmentTestUtils.addEnvironment(this.context, properties);
this.context.register(TestConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
EndpointWebMvcHypermediaManagementContextConfiguration.class);
this.context.refresh();
}
private void createContext() {
this.context = new AnnotationConfigWebApplicationContext();
this.context.setClassLoader(new ClassLoader(getClass().getClassLoader()) {
......@@ -126,11 +158,6 @@ public class EndpointWebMvcHypermediaManagementContextConfigurationTests {
}
});
EnvironmentTestUtils.addEnvironment(this.context, properties);
this.context.register(TestConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
EndpointWebMvcHypermediaManagementContextConfiguration.class);
this.context.refresh();
}
private String getCurieHref() {
......@@ -152,4 +179,40 @@ public class EndpointWebMvcHypermediaManagementContextConfigurationTests {
}
@Configuration
static class DocsConfiguration {
@Bean
public DocsMvcEndpoint testDocsMvcEndpoint(ManagementServletContext managementServletContext) {
return new TestDocsMvcEndpoint(managementServletContext);
}
}
@Configuration
static class HalJsonConfiguration {
@Bean
public HalJsonMvcEndpoint testHalJsonMvcEndpoint(ManagementServletContext managementServletContext) {
return new TestHalJsonMvcEndpoint(managementServletContext);
}
}
static class TestDocsMvcEndpoint extends DocsMvcEndpoint {
TestDocsMvcEndpoint(ManagementServletContext managementServletContext) {
super(managementServletContext);
}
}
static class TestHalJsonMvcEndpoint extends HalJsonMvcEndpoint {
TestHalJsonMvcEndpoint(ManagementServletContext managementServletContext) {
super(managementServletContext);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment