traceRepository) {
+ return new TraceEndpoint(
+ traceRepository.getIfAvailable(() -> new InMemoryTraceRepository()));
+ }
+
+}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java
similarity index 100%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfiguration.java
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java
similarity index 97%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java
index ea3685c4c9..a9fa4c5d6d 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfiguration.java
@@ -29,8 +29,8 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java
similarity index 92%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java
index f3c3cbbc44..0bec580d50 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/package-info.java
@@ -15,6 +15,6 @@
*/
/**
- * Auto-configuration for tracing.
+ * Auto-configuration for actuator tracing concerns.
*/
package org.springframework.boot.actuate.autoconfigure.trace;
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java
similarity index 91%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java
index ce3b3db365..8b2c5b6c85 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfiguration.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextConfiguration.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@@ -30,7 +30,7 @@ import org.springframework.core.annotation.Order;
* Specialized {@link Configuration @Configuration} class that defines configuration
* specific for the management context. Configurations should be registered in
* {@code /META-INF/spring.factories} under the
- * {@code org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration}
+ * {@code org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration}
* key.
*
* {@code ManagementContextConfiguration} classes can be ordered using {@link Order}.
@@ -38,7 +38,7 @@ import org.springframework.core.annotation.Order;
*
* @author Phillip Webb
* @author Andy Wilkinson
- * @since 1.3.0
+ * @since 2.0.0
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextFactory.java
similarity index 84%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextFactory.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextFactory.java
index 91154ca6e8..7d4f67fd98 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextFactory.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextFactory.java
@@ -14,18 +14,19 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
/**
- * A factory for creating a separate management context when the management web server is
+ * Factory for creating a separate management context when the management web server is
* running on a different port to the main application.
*
* @author Andy Wilkinson
+ * @since 2.0.0
*/
-interface ManagementContextFactory {
+public interface ManagementContextFactory {
/**
* Create the management application context.
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextType.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextType.java
similarity index 94%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextType.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextType.java
index 68d0e023c0..5e245ea5de 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextType.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementContextType.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web;
/**
* Enumeration of management context types.
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java
new file mode 100644
index 0000000000..7a331ce578
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyManagementChildContextConfiguration.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.jersey;
+
+import java.util.List;
+
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.servlet.ServletContainer;
+
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
+import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * {@link ManagementContextConfiguration} for Jersey infrastructure when a separate
+ * management context with a web server running on a different port is required.
+ *
+ * @author Stephane Nicoll
+ * @author Andy Wilkinson
+ * @author Phillip Webb
+ * @since 2.0.0
+ */
+@ManagementContextConfiguration(ManagementContextType.CHILD)
+@ConditionalOnWebApplication(type = Type.SERVLET)
+@ConditionalOnClass(ResourceConfig.class)
+@ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet")
+public class JerseyManagementChildContextConfiguration {
+
+ private final List resourceConfigCustomizers;
+
+ public JerseyManagementChildContextConfiguration(
+ List resourceConfigCustomizers) {
+ this.resourceConfigCustomizers = resourceConfigCustomizers;
+ }
+
+ @Bean
+ public ServletRegistrationBean jerseyServletRegistration() {
+ ServletRegistrationBean registration = new ServletRegistrationBean<>(
+ new ServletContainer(endpointResourceConfig()), "/*");
+ return registration;
+ }
+
+ @Bean
+ public ResourceConfig endpointResourceConfig() {
+ ResourceConfig resourceConfig = new ResourceConfig();
+ for (ResourceConfigCustomizer customizer : this.resourceConfigCustomizers) {
+ customizer.customize(resourceConfig);
+ }
+ return resourceConfig;
+ }
+
+}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java
similarity index 64%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java
index 41596f9c37..d3136ccb60 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ReactiveEndpointChildManagementContextConfiguration.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementChildContextConfiguration.java
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.web.reactive;
import org.springframework.beans.factory.ListableBeanFactory;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextType;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerFactoryCustomizer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.boot.autoconfigure.web.reactive.DefaultReactiveWebServerCustomizer;
@@ -30,31 +31,33 @@ import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
/**
- * Configuration for reactive web endpoint infrastructure when a separate management
- * context with a web server running on a different port is required.
+ * {@link ManagementContextConfiguration} for reactive web infrastructure when a separate
+ * management context with a web server running on a different port is required.
*
* @author Andy Wilkinson
+ * @author Phillip Webb
+ * @since 2.0.0
*/
@EnableWebFlux
@ManagementContextConfiguration(ManagementContextType.CHILD)
@ConditionalOnWebApplication(type = Type.REACTIVE)
-class ReactiveEndpointChildManagementContextConfiguration {
+public class ReactiveManagementChildContextConfiguration {
+
+ @Bean
+ public ReactiveManagementServerFactoryCustomizer reactiveManagementServerFactoryCustomizer(
+ ListableBeanFactory beanFactory) {
+ return new ReactiveManagementServerFactoryCustomizer(beanFactory);
+ }
@Bean
public HttpHandler httpHandler(ApplicationContext applicationContext) {
return WebHttpHandlerBuilder.applicationContext(applicationContext).build();
}
- @Bean
- public ManagementReactiveWebServerFactoryCustomizer webServerFactoryCustomizer(
- ListableBeanFactory beanFactory) {
- return new ManagementReactiveWebServerFactoryCustomizer(beanFactory);
- }
+ class ReactiveManagementServerFactoryCustomizer extends
+ ManagementServerFactoryCustomizer {
- static class ManagementReactiveWebServerFactoryCustomizer extends
- ManagementWebServerFactoryCustomizer {
-
- ManagementReactiveWebServerFactoryCustomizer(ListableBeanFactory beanFactory) {
+ ReactiveManagementServerFactoryCustomizer(ListableBeanFactory beanFactory) {
super(beanFactory, DefaultReactiveWebServerCustomizer.class);
}
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java
new file mode 100644
index 0000000000..e2e4bceec1
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextAutoConfiguration.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.reactive;
+
+import javax.servlet.Servlet;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for Servlet-specific management
+ * context concerns.
+ *
+ * @author Phillip Webb
+ * @since 2.0.0
+ */
+@Configuration
+@ConditionalOnClass(Servlet.class)
+@ConditionalOnWebApplication(type = Type.REACTIVE)
+public class ReactiveManagementContextAutoConfiguration {
+
+ @Bean
+ public ReactiveManagementContextFactory reactiveWebChildContextFactory() {
+ return new ReactiveManagementContextFactory();
+ }
+
+}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java
similarity index 85%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java
index 08167a00d1..e74e286796 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ReactiveWebManagementContextFactory.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/reactive/ReactiveManagementContextFactory.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.reactive;
import java.lang.reflect.Modifier;
@@ -23,6 +23,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory;
import org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerAutoConfiguration;
import org.springframework.boot.web.reactive.context.GenericReactiveWebApplicationContext;
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext;
@@ -31,11 +32,11 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
/**
- * A {@link ManagementContextFactory} for WebFlux-based web applications.
+ * A {@link ManagementContextFactory} for reactive web applications.
*
* @author Andy Wilkinson
*/
-class ReactiveWebManagementContextFactory implements ManagementContextFactory {
+class ReactiveManagementContextFactory implements ManagementContextFactory {
@Override
public ConfigurableApplicationContext createManagementContext(
@@ -76,10 +77,11 @@ class ReactiveWebManagementContextFactory implements ManagementContextFactory {
return factoryClass;
}
- private boolean cannotBeInstantiated(Class> clazz) {
- return clazz.isLocalClass()
- || (clazz.isMemberClass() && !Modifier.isStatic(clazz.getModifiers()))
- || clazz.isAnonymousClass();
+ private boolean cannotBeInstantiated(Class> factoryClass) {
+ return factoryClass.isLocalClass()
+ || (factoryClass.isMemberClass()
+ && !Modifier.isStatic(factoryClass.getModifiers()))
+ || factoryClass.isAnonymousClass();
}
}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ConditionalOnManagementPort.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ConditionalOnManagementPort.java
similarity index 93%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ConditionalOnManagementPort.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ConditionalOnManagementPort.java
index 2871986475..5dcdc2cf5f 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ConditionalOnManagementPort.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ConditionalOnManagementPort.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@@ -27,6 +27,7 @@ import org.springframework.context.annotation.Conditional;
/**
* {@link Conditional} that matches based on the configuration of the management port.
*
+ * @author Andy Wilkinson
* @since 2.0.0
*/
@Retention(RetentionPolicy.RUNTIME)
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableChildManagementContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableChildManagementContextConfiguration.java
similarity index 86%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableChildManagementContextConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableChildManagementContextConfiguration.java
index 55f32b2a6c..284ea4b9db 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableChildManagementContextConfiguration.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableChildManagementContextConfiguration.java
@@ -14,8 +14,9 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
import org.springframework.context.annotation.Configuration;
/**
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableManagementContext.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableManagementContext.java
similarity index 89%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableManagementContext.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableManagementContext.java
index b487af37b7..8ac078f94a 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EnableManagementContext.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/EnableManagementContext.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@@ -22,6 +22,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
import org.springframework.context.annotation.Import;
/**
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/LocalManagementPort.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/LocalManagementPort.java
similarity index 94%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/LocalManagementPort.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/LocalManagementPort.java
index 44ea827e78..2188d2693a 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/LocalManagementPort.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/LocalManagementPort.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.web.server;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@@ -30,7 +30,7 @@ import org.springframework.beans.factory.annotation.Value;
* @Value("${local.management.port}").
*
* @author Stephane Nicoll
- * @since 1.4.0
+ * @since 2.0.0
*/
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
ElementType.ANNOTATION_TYPE })
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java
similarity index 85%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextAutoConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java
index 79c7d72884..462f227080 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextAutoConfiguration.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java
@@ -14,23 +14,21 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import org.springframework.beans.factory.SmartInitializingSingleton;
-import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties;
-import org.springframework.boot.actuate.endpoint.mvc.ManagementServletContext;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.context.event.ApplicationFailedEvent;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.reactive.context.ConfigurableReactiveWebApplicationContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.support.AbstractApplicationContext;
@@ -54,20 +52,9 @@ import org.springframework.web.context.ConfigurableWebApplicationContext;
*/
@Configuration
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
+@EnableConfigurationProperties(ManagementServerProperties.class)
public class ManagementContextAutoConfiguration {
- @Configuration
- @ConditionalOnWebApplication(type = Type.SERVLET)
- static class ServletManagementContextConfiguration {
-
- @Bean
- public ManagementServletContext managementServletContext(
- ManagementServerProperties properties) {
- return () -> properties.getContextPath();
- }
-
- }
-
@Configuration
@ConditionalOnManagementPort(ManagementPortType.SAME)
static class SameManagementContextConfiguration
@@ -126,14 +113,14 @@ public class ManagementContextAutoConfiguration {
@Configuration
@ConditionalOnManagementPort(ManagementPortType.DIFFERENT)
- static class SeparateManagementContextConfiguration
+ static class DifferentManagementContextConfiguration
implements SmartInitializingSingleton {
private final ApplicationContext applicationContext;
private final ManagementContextFactory managementContextFactory;
- SeparateManagementContextConfiguration(ApplicationContext applicationContext,
+ DifferentManagementContextConfiguration(ApplicationContext applicationContext,
ManagementContextFactory managementContextFactory) {
this.applicationContext = applicationContext;
this.managementContextFactory = managementContextFactory;
@@ -170,26 +157,6 @@ public class ManagementContextAutoConfiguration {
}
}
- @ConditionalOnWebApplication(type = Type.SERVLET)
- static class ServletChildContextConfiguration {
-
- @Bean
- public ServletWebManagementContextFactory servletWebChildContextFactory() {
- return new ServletWebManagementContextFactory();
- }
-
- }
-
- @ConditionalOnWebApplication(type = Type.REACTIVE)
- static class ReactiveChildContextConfiguration {
-
- @Bean
- public ReactiveWebManagementContextFactory reactiveWebChildContextFactory() {
- return new ReactiveWebManagementContextFactory();
- }
-
- }
-
}
/**
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelector.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelector.java
similarity index 93%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelector.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelector.java
index 1b90fa0991..22e58d1f30 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelector.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelector.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.io.IOException;
import java.util.ArrayList;
@@ -22,6 +22,8 @@ import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.BeanClassLoaderAware;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
import org.springframework.context.annotation.DeferredImportSelector;
import org.springframework.core.OrderComparator;
import org.springframework.core.Ordered;
@@ -71,12 +73,12 @@ class ManagementContextConfigurationImportSelector
this.classLoader);
List configurations = new ArrayList<>();
for (String className : loadFactoryNames()) {
- getConfiguration(readerFactory, configurations, className);
+ addConfiguration(readerFactory, configurations, className);
}
return configurations;
}
- private void getConfiguration(SimpleMetadataReaderFactory readerFactory,
+ private void addConfiguration(SimpleMetadataReaderFactory readerFactory,
List configurations, String className) {
try {
MetadataReader metadataReader = readerFactory.getMetadataReader(className);
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementPortType.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementPortType.java
similarity index 96%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementPortType.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementPortType.java
index 7a90f8fd98..d0b2d76e3f 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementPortType.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementPortType.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import org.springframework.core.env.Environment;
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java
similarity index 72%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java
index 3527e82c06..030b7dbc09 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ManagementWebServerFactoryCustomizer.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerFactoryCustomizer.java
@@ -14,13 +14,12 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.util.Collections;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.ListableBeanFactory;
-import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.ErrorPage;
@@ -35,15 +34,16 @@ import org.springframework.core.Ordered;
*
* @param the type of web server factory to customize
* @author Andy Wilkinson
+ * @since 2.0.0
*/
-abstract class ManagementWebServerFactoryCustomizer
+public abstract class ManagementServerFactoryCustomizer
implements WebServerFactoryCustomizer, Ordered {
private final ListableBeanFactory beanFactory;
private final Class extends WebServerFactoryCustomizer> customizerClass;
- protected ManagementWebServerFactoryCustomizer(ListableBeanFactory beanFactory,
+ protected ManagementServerFactoryCustomizer(ListableBeanFactory beanFactory,
Class extends WebServerFactoryCustomizer> customizerClass) {
this.beanFactory = beanFactory;
this.customizerClass = customizerClass;
@@ -55,7 +55,7 @@ abstract class ManagementWebServerFactoryCustomizeremptySet());
+ factory.setErrorPages(Collections.emptySet());
// and add the management-specific bits
- customize(webServerFactory, managementServerProperties, serverProperties);
+ customize(factory, managementServerProperties, serverProperties);
}
- protected void customize(T webServerFactory,
+ protected void customize(T factory,
ManagementServerProperties managementServerProperties,
ServerProperties serverProperties) {
- webServerFactory.setPort(managementServerProperties.getPort());
+ factory.setPort(managementServerProperties.getPort());
Ssl ssl = managementServerProperties.getSsl();
if (ssl != null) {
- webServerFactory.setSsl(ssl);
+ factory.setSsl(ssl);
}
- webServerFactory.setServerHeader(serverProperties.getServerHeader());
- webServerFactory.setAddress(managementServerProperties.getAddress());
- webServerFactory
- .addErrorPages(new ErrorPage(serverProperties.getError().getPath()));
+ factory.setServerHeader(serverProperties.getServerHeader());
+ factory.setAddress(managementServerProperties.getAddress());
+ factory.addErrorPages(new ErrorPage(serverProperties.getError().getPath()));
}
}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerProperties.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java
similarity index 97%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerProperties.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java
index 7ffe28d930..28fda50e12 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerProperties.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.web;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.net.InetAddress;
@@ -32,6 +32,7 @@ import org.springframework.util.StringUtils;
* @author Dave Syer
* @author Stephane Nicoll
* @author Vedran Pavic
+ * @since 2.0.0
* @see ServerProperties
*/
@ConfigurationProperties(prefix = "management", ignoreUnknownFields = true)
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnManagementPortCondition.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/OnManagementPortCondition.java
similarity index 93%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnManagementPortCondition.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/OnManagementPortCondition.java
index c3627d977e..1b441f7020 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/OnManagementPortCondition.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/OnManagementPortCondition.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.util.Map;
@@ -47,10 +47,9 @@ class OnManagementPortCondition extends SpringBootCondition {
return ConditionOutcome
.noMatch(message.because("non web application context"));
}
- Map annotationAttributes = metadata
+ Map attributes = metadata
.getAnnotationAttributes(ConditionalOnManagementPort.class.getName());
- ManagementPortType requiredType = (ManagementPortType) annotationAttributes
- .get("value");
+ ManagementPortType requiredType = (ManagementPortType) attributes.get("value");
ManagementPortType actualType = ManagementPortType.get(context.getEnvironment());
if (actualType == requiredType) {
return ConditionOutcome.match(message.because(
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/package-info.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/package-info.java
similarity index 90%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/package-info.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/package-info.java
index 3103f97c71..0c4e17ff03 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/server/package-info.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/package-info.java
@@ -16,6 +16,5 @@
/**
* Actuator web server support.
- *
*/
-package org.springframework.boot.actuate.web.server;
+package org.springframework.boot.actuate.autoconfigure.web.server;
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java
new file mode 100644
index 0000000000..a599f668a5
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerAdapter.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.core.annotation.AnnotationAwareOrderComparator;
+import org.springframework.web.servlet.HandlerAdapter;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * Composite {@link HandlerAdapter}.
+ *
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Phillip Webb
+ */
+class CompositeHandlerAdapter implements HandlerAdapter {
+
+ private final ListableBeanFactory beanFactory;
+
+ private List adapters;
+
+ CompositeHandlerAdapter(ListableBeanFactory beanFactory) {
+ this.beanFactory = beanFactory;
+ }
+
+ @Override
+ public boolean supports(Object handler) {
+ return getAdapter(handler).isPresent();
+ }
+
+ @Override
+ public ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
+ Object handler) throws Exception {
+ Optional adapter = getAdapter(handler);
+ if (adapter.isPresent()) {
+ return adapter.get().handle(request, response, handler);
+ }
+ return null;
+ }
+
+ @Override
+ public long getLastModified(HttpServletRequest request, Object handler) {
+ Optional adapter = getAdapter(handler);
+ if (adapter.isPresent()) {
+ return adapter.get().getLastModified(request, handler);
+ }
+ return 0;
+ }
+
+ private Optional getAdapter(Object handler) {
+ if (this.adapters == null) {
+ this.adapters = extractAdapters();
+ }
+ return this.adapters.stream().filter((a) -> a.supports(handler)).findFirst();
+ }
+
+ private List extractAdapters() {
+ List list = new ArrayList<>();
+ list.addAll(this.beanFactory.getBeansOfType(HandlerAdapter.class).values());
+ list.remove(this);
+ AnnotationAwareOrderComparator.sort(list);
+ return list;
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java
new file mode 100644
index 0000000000..1159030897
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerExceptionResolver.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.AnnotationAwareOrderComparator;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * Composite {@link HandlerExceptionResolver}.
+ *
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Phillip Webb
+ */
+class CompositeHandlerExceptionResolver implements HandlerExceptionResolver {
+
+ @Autowired
+ private ListableBeanFactory beanFactory;
+
+ private List resolvers;
+
+ @Override
+ public ModelAndView resolveException(HttpServletRequest request,
+ HttpServletResponse response, Object handler, Exception ex) {
+ if (this.resolvers == null) {
+ this.resolvers = extractResolvers();
+ }
+ return this.resolvers.stream().map(
+ (resolver) -> resolver.resolveException(request, response, handler, ex))
+ .filter(Objects::nonNull).findFirst().orElse(null);
+ }
+
+ private List extractResolvers() {
+ List list = new ArrayList<>();
+ list.addAll(
+ this.beanFactory.getBeansOfType(HandlerExceptionResolver.class).values());
+ list.remove(this);
+ AnnotationAwareOrderComparator.sort(list);
+ return list;
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java
new file mode 100644
index 0000000000..c975cf1f67
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/CompositeHandlerMapping.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.AnnotationAwareOrderComparator;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.HandlerExecutionChain;
+import org.springframework.web.servlet.HandlerMapping;
+
+/**
+ * Composite {@link HandlerExceptionResolver}.
+ *
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Phillip Webb
+ */
+class CompositeHandlerMapping implements HandlerMapping {
+
+ @Autowired
+ private ListableBeanFactory beanFactory;
+
+ private List mappings;
+
+ @Override
+ public HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
+ if (this.mappings == null) {
+ this.mappings = extractMappings();
+ }
+ for (HandlerMapping mapping : this.mappings) {
+ HandlerExecutionChain handler = mapping.getHandler(request);
+ if (handler != null) {
+ return handler;
+ }
+ }
+ return null;
+ }
+
+ private List extractMappings() {
+ List list = new ArrayList<>();
+ list.addAll(this.beanFactory.getBeansOfType(HandlerMapping.class).values());
+ list.remove(this);
+ AnnotationAwareOrderComparator.sort(list);
+ return list;
+ }
+
+}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementErrorEndpoint.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementErrorEndpoint.java
similarity index 88%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementErrorEndpoint.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementErrorEndpoint.java
index 23389b9f9d..aec514bcbb 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementErrorEndpoint.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementErrorEndpoint.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint.mvc;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
import java.util.Map;
-import org.springframework.boot.autoconfigure.web.servlet.error.ErrorAttributes;
-import org.springframework.boot.autoconfigure.web.servlet.error.ErrorController;
+import org.springframework.boot.web.servlet.error.ErrorAttributes;
+import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -32,6 +32,7 @@ import org.springframework.web.context.request.ServletWebRequest;
* the way the handler mappings are set up it will not be detected.
*
* @author Dave Syer
+ * @since 2.0.0
*/
@Controller
public class ManagementErrorEndpoint {
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementServletContext.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementServletContext.java
similarity index 91%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementServletContext.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementServletContext.java
index 21ed75f334..94af0d3637 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/ManagementServletContext.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ManagementServletContext.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint.mvc;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
/**
* Provides information about the management servlet context for MVC controllers to use.
*
* @author Phillip Webb
- * @since 1.3.0
+ * @since 2.0.0
*/
@FunctionalInterface
public interface ManagementServletContext {
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpoint.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpoint.java
similarity index 95%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpoint.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpoint.java
index ddc851522b..5ac5864932 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpoint.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpoint.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
import java.util.Collection;
import java.util.Collections;
@@ -25,8 +25,8 @@ import java.util.Map.Entry;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.BeansException;
-import org.springframework.boot.endpoint.Endpoint;
-import org.springframework.boot.endpoint.ReadOperation;
+import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
+import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.method.HandlerMethod;
@@ -38,6 +38,7 @@ import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;
*
* @author Dave Syer
* @author Andy Wilkinson
+ * @since 2.0.0
*/
@Endpoint(id = "mappings")
public class RequestMappingEndpoint implements ApplicationContextAware {
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java
new file mode 100644
index 0000000000..04bac88a4f
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointAutoConfiguration.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
+
+import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.handler.AbstractHandlerMethodMapping;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link RequestMappingEndpoint}.
+ *
+ * @author Phillip Webb
+ * @since 2.0.0
+ */
+@Configuration
+@ConditionalOnClass(AbstractHandlerMethodMapping.class)
+public class RequestMappingEndpointAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ @ConditionalOnEnabledEndpoint
+ public RequestMappingEndpoint requestMappingEndpoint() {
+ return new RequestMappingEndpoint();
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java
new file mode 100644
index 0000000000..46c12d1969
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
+
+import javax.servlet.Filter;
+
+import org.apache.catalina.Valve;
+import org.apache.catalina.valves.AccessLogValve;
+
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.HierarchicalBeanFactory;
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerFactoryCustomizer;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
+import org.springframework.boot.autoconfigure.condition.SearchStrategy;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.autoconfigure.web.servlet.DefaultServletWebServerFactoryCustomizer;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
+import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
+import org.springframework.boot.web.server.WebServerFactoryCustomizer;
+import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+
+/**
+ * {@link ManagementContextConfiguration} for Servlet web endpoint infrastructure when a
+ * separate management context with a web server running on a different port is required.
+ *
+ * @author Dave Syer
+ * @author Stephane Nicoll
+ * @author Andy Wilkinson
+ * @author EddĂș MelĂ©ndez
+ * @author Phillip Webb
+ */
+@Configuration
+@ManagementContextConfiguration(ManagementContextType.CHILD)
+@ConditionalOnWebApplication(type = Type.SERVLET)
+class ServletManagementChildContextConfiguration {
+
+ @Bean
+ public ServletManagementServerFactoryCustomizer serverFactoryCustomizer(
+ ListableBeanFactory beanFactory) {
+ return new ServletManagementServerFactoryCustomizer(beanFactory);
+ }
+
+ @Bean
+ public UndertowAccessLogCustomizer undertowAccessLogCustomizer() {
+ return new UndertowAccessLogCustomizer();
+ }
+
+ @Bean
+ @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve")
+ public TomcatAccessLogCustomizer tomcatAccessLogCustomizer() {
+ return new TomcatAccessLogCustomizer();
+ }
+
+ @Configuration
+ @ConditionalOnClass({ EnableWebSecurity.class, Filter.class })
+ @ConditionalOnBean(name = "springSecurityFilterChain", search = SearchStrategy.ANCESTORS)
+ class ServletManagementContextSecurityConfiguration {
+
+ @Bean
+ public Filter springSecurityFilterChain(HierarchicalBeanFactory beanFactory) {
+ BeanFactory parent = beanFactory.getParentBeanFactory();
+ return parent.getBean("springSecurityFilterChain", Filter.class);
+ }
+
+ }
+
+ static class ServletManagementServerFactoryCustomizer extends
+ ManagementServerFactoryCustomizer {
+
+ ServletManagementServerFactoryCustomizer(ListableBeanFactory beanFactory) {
+ super(beanFactory, DefaultServletWebServerFactoryCustomizer.class);
+ }
+
+ @Override
+ protected void customize(ConfigurableServletWebServerFactory webServerFactory,
+ ManagementServerProperties managementServerProperties,
+ ServerProperties serverProperties) {
+ super.customize(webServerFactory, managementServerProperties,
+ serverProperties);
+ webServerFactory.setContextPath("");
+ }
+
+ }
+
+ static abstract class AccessLogCustomizer implements Ordered {
+
+ protected String customizePrefix(String prefix) {
+ return "management_" + prefix;
+ }
+
+ @Override
+ public int getOrder() {
+ return 1;
+ }
+
+ }
+
+ static class TomcatAccessLogCustomizer extends AccessLogCustomizer
+ implements WebServerFactoryCustomizer {
+
+ @Override
+ public void customize(TomcatServletWebServerFactory serverFactory) {
+ AccessLogValve accessLogValve = findAccessLogValve(serverFactory);
+ if (accessLogValve == null) {
+ return;
+ }
+ accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix()));
+ }
+
+ private AccessLogValve findAccessLogValve(
+ TomcatServletWebServerFactory serverFactory) {
+ for (Valve engineValve : serverFactory.getEngineValves()) {
+ if (engineValve instanceof AccessLogValve) {
+ return (AccessLogValve) engineValve;
+ }
+ }
+ return null;
+ }
+
+ }
+
+ static class UndertowAccessLogCustomizer extends AccessLogCustomizer
+ implements WebServerFactoryCustomizer {
+
+ @Override
+ public void customize(UndertowServletWebServerFactory serverFactory) {
+ serverFactory.setAccessLogPrefix(
+ customizePrefix(serverFactory.getAccessLogPrefix()));
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java
similarity index 53%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java
index 2bc92539af..a410ba8a7e 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/ServletEndpointAutoConfiguration.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration.java
@@ -14,58 +14,42 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
import javax.servlet.Servlet;
-import org.springframework.boot.actuate.autoconfigure.endpoint.ManagementContextResolver;
-import org.springframework.boot.actuate.autoconfigure.web.ManagementServerProperties;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
-import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
-import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration;
-import org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration;
-import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.filter.ApplicationContextHeaderFilter;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
- * {@link EnableAutoConfiguration Auto-configuration} for Servlet-specific endpoint
- * concerns.
+ * {@link EnableAutoConfiguration Auto-configuration} for Servlet-specific management
+ * context concerns.
*
- * @author Dave Syer
* @author Phillip Webb
- * @author Christian Dupuis
- * @author Andy Wilkinson
- * @author Johannes Edmeier
- * @author EddĂș MelĂ©ndez
- * @author Venil Noronha
- * @author Madhura Bhave
+ * @since 2.0.0
*/
@Configuration
@ConditionalOnClass(Servlet.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
-@EnableConfigurationProperties(ManagementServerProperties.class)
-@AutoConfigureAfter({ PropertyPlaceholderAutoConfiguration.class,
- ServletWebServerFactoryAutoConfiguration.class, WebMvcAutoConfiguration.class,
- RepositoryRestMvcAutoConfiguration.class, HypermediaAutoConfiguration.class,
- HttpMessageConvertersAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class })
-public class ServletEndpointAutoConfiguration {
+public class ServletManagementContextAutoConfiguration {
@Bean
- public ManagementContextResolver managementContextResolver(
- ApplicationContext applicationContext) {
- return new ManagementContextResolver(applicationContext);
+ public ServletManagementContextFactory servletWebChildContextFactory() {
+ return new ServletManagementContextFactory();
+ }
+
+ @Bean
+ public ManagementServletContext managementServletContext(
+ ManagementServerProperties properties) {
+ return () -> properties.getContextPath();
}
// Put Servlets and Filters in their own nested class so they don't force early
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java
similarity index 87%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java
rename to spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java
index 7efb1878ba..ba79dfa41b 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ServletWebManagementContextFactory.java
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextFactory.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
@@ -26,6 +26,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextFactory;
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
@@ -37,7 +38,7 @@ import org.springframework.context.ConfigurableApplicationContext;
*
* @author Andy Wilkinson
*/
-class ServletWebManagementContextFactory implements ManagementContextFactory {
+class ServletManagementContextFactory implements ManagementContextFactory {
@Override
public ConfigurableApplicationContext createManagementContext(
@@ -79,10 +80,11 @@ class ServletWebManagementContextFactory implements ManagementContextFactory {
return factoryClass;
}
- private boolean cannotBeInstantiated(Class> clazz) {
- return clazz.isLocalClass()
- || (clazz.isMemberClass() && !Modifier.isStatic(clazz.getModifiers()))
- || clazz.isAnonymousClass();
+ private boolean cannotBeInstantiated(Class> factoryClass) {
+ return factoryClass.isLocalClass()
+ || (factoryClass.isMemberClass()
+ && !Modifier.isStatic(factoryClass.getModifiers()))
+ || factoryClass.isAnonymousClass();
}
}
diff --git a/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java
new file mode 100644
index 0000000000..baa6ae0ebc
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
+
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
+import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
+import org.springframework.boot.web.servlet.error.ErrorAttributes;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.servlet.DispatcherServlet;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+
+/**
+ * {@link ManagementContextConfiguration} for Spring MVC infrastructure when a separate
+ * management context with a web server running on a different port is required.
+ *
+ * @author Stephane Nicoll
+ * @author Andy Wilkinson
+ * @author Phillip Webb
+ * @since 2.0.0
+ */
+@ManagementContextConfiguration(ManagementContextType.CHILD)
+@ConditionalOnWebApplication(type = Type.SERVLET)
+@ConditionalOnClass(DispatcherServlet.class)
+@EnableWebMvc
+class WebMvcEndpointChildContextConfiguration {
+
+ /*
+ * The error controller is present but not mapped as an endpoint in this context
+ * because of the DispatcherServlet having had its HandlerMapping explicitly disabled.
+ * So we expose the same feature but only for machine endpoints.
+ */
+ @Bean
+ @ConditionalOnBean(ErrorAttributes.class)
+ public ManagementErrorEndpoint errorEndpoint(ErrorAttributes errorAttributes) {
+ return new ManagementErrorEndpoint(errorAttributes);
+ }
+
+ @Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
+ public DispatcherServlet dispatcherServlet() {
+ DispatcherServlet dispatcherServlet = new DispatcherServlet();
+ // Ensure the parent configuration does not leak down to us
+ dispatcherServlet.setDetectAllHandlerAdapters(false);
+ dispatcherServlet.setDetectAllHandlerExceptionResolvers(false);
+ dispatcherServlet.setDetectAllHandlerMappings(false);
+ dispatcherServlet.setDetectAllViewResolvers(false);
+ return dispatcherServlet;
+ }
+
+ @Bean(name = DispatcherServlet.HANDLER_MAPPING_BEAN_NAME)
+ public CompositeHandlerMapping compositeHandlerMapping() {
+ return new CompositeHandlerMapping();
+ }
+
+ @Bean(name = DispatcherServlet.HANDLER_ADAPTER_BEAN_NAME)
+ public CompositeHandlerAdapter compositeHandlerAdapter(
+ ListableBeanFactory beanFactory) {
+ return new CompositeHandlerAdapter(beanFactory);
+ }
+
+ @Bean(name = DispatcherServlet.HANDLER_EXCEPTION_RESOLVER_BEAN_NAME)
+ public CompositeHandlerExceptionResolver compositeHandlerExceptionResolver() {
+ return new CompositeHandlerExceptionResolver();
+ }
+
+}
diff --git a/spring-boot-actuator/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json
similarity index 100%
rename from spring-boot-actuator/src/main/resources/META-INF/additional-spring-configuration-metadata.json
rename to spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json
diff --git a/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000000..f3f69dd701
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,60 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.springframework.boot.actuate.autoconfigure.amqp.RabbitHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.cache.CacheStatisticsAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.cassandra.CassandraHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryActuatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.condition.AutoConfigurationReportEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticsearchHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.flyway.FlywayEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.jms.JmsHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.ldap.LdapHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.liquibase.LiquibaseEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.mail.MailHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.MetricExportAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.MetricFilterAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.MetricRepositoryAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.MetricsChannelAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.MetricsDropwizardAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.metrics.PublicMetricsAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.neo4j.Neo4jHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.redis.RedisHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.solr.SolrHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.trace.TraceEndpointAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.trace.TraceRepositoryAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.trace.TraceWebFilterAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.reactive.ReactiveManagementContextAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.servlet.RequestMappingEndpointAutoConfiguration
+
+org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration=\
+org.springframework.boot.actuate.autoconfigure.endpoint.web.reactive.WebFluxEndpointManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.endpoint.web.jersey.JerseyWebEndpointManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.health.HealthWebEndpointManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointManagementContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.jersey.JerseyManagementChildContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.reactive.ReactiveManagementChildContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementChildContextConfiguration,\
+org.springframework.boot.actuate.autoconfigure.web.servlet.WebMvcEndpointChildContextConfiguration
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java
similarity index 93%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java
index 3d07c0b71d..9e0aaccbe4 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java
@@ -19,7 +19,6 @@ package org.springframework.boot.actuate.autoconfigure;
import org.junit.After;
import org.junit.Test;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration;
import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration;
@@ -30,6 +29,7 @@ import org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfigurat
import org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration;
+import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.test.util.ApplicationContextTestUtils;
import org.springframework.context.ConfigurableApplicationContext;
@@ -67,7 +67,8 @@ public class SpringApplicationHierarchyTests {
CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class,
MongoDataAutoConfiguration.class, Neo4jDataAutoConfiguration.class,
Neo4jRepositoriesAutoConfiguration.class, RedisAutoConfiguration.class,
- RedisRepositoriesAutoConfiguration.class }, excludeName = {
+ RedisRepositoriesAutoConfiguration.class,
+ FlywayAutoConfiguration.class }, excludeName = {
"org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration" })
public static class Child {
@@ -79,7 +80,7 @@ public class SpringApplicationHierarchyTests {
MongoDataAutoConfiguration.class, Neo4jDataAutoConfiguration.class,
Neo4jRepositoriesAutoConfiguration.class, RedisAutoConfiguration.class,
RedisRepositoriesAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class }, excludeName = {
+ FlywayAutoConfiguration.class }, excludeName = {
"org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration" })
public static class Parent {
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..e5099f6088
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/amqp/RabbitHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.amqp;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.amqp.RabbitHealthIndicator;
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link RabbitHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class RabbitHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(RabbitAutoConfiguration.class,
+ RabbitHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(RabbitHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.rabbit.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(RabbitHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditAutoConfigurationTests.java
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..dba2173e4c
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfigurationTests.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.audit;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.audit.AuditEventsEndpoint;
+import org.springframework.boot.actuate.audit.AuditEventsJmxEndpointExtension;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link AuditEventsEndpointAutoConfiguration}.
+ *
+ * @author Andy Wilkinson
+ * @author Phillip Webb
+ */
+public class AuditEventsEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(AuditAutoConfiguration.class,
+ AuditEventsEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(AuditEventsEndpoint.class));
+ }
+
+ @Test
+ public void runShouldHaveJmxExtensionBean() {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(AuditEventsJmxEndpointExtension.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointOrExtensionBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.auditevents.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(AuditEventsEndpoint.class)
+ .doesNotHaveBean(AuditEventsJmxEndpointExtension.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..620e3b5c2f
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.beans;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.beans.BeansEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link BeansEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class BeansEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(BeansEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner
+ .run((context) -> assertThat(context).hasSingleBean(BeansEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.beans.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(BeansEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CacheStatisticsAutoConfigurationTests.java
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..6bd030a6ee
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cassandra/CassandraHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.cassandra;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.cassandra.CassandraHealthIndicator;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.cassandra.core.CassandraOperations;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link CassandraHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class CassandraHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(CassandraConfiguration.class,
+ CassandraHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(CassandraHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.cassandra.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(CassandraHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @AutoConfigureBefore(CassandraHealthIndicatorAutoConfiguration.class)
+ protected static class CassandraConfiguration {
+
+ @Bean
+ public CassandraOperations cassandraOperations() {
+ return mock(CassandraOperations.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AccessLevelTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevelTests.java
similarity index 96%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AccessLevelTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevelTests.java
index 40a13a47d8..50d6268bdf 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AccessLevelTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AccessLevelTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import org.junit.Test;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AuthorizationExceptionMatcher.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AuthorizationExceptionMatcher.java
similarity index 87%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AuthorizationExceptionMatcher.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AuthorizationExceptionMatcher.java
index e72d9ba0d9..1ca01e0e9a 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/AuthorizationExceptionMatcher.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/AuthorizationExceptionMatcher.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import org.hamcrest.CustomMatcher;
import org.hamcrest.Matcher;
-import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason;
+import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason;
/**
* Hamcrest matcher to check the {@link AuthorizationExceptionMatcher} {@link Reason}.
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java
similarity index 93%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java
index 90c6fb268a..4f815d8cea 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryActuatorAutoConfigurationTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import java.util.Arrays;
@@ -22,8 +22,9 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
@@ -64,8 +65,9 @@ public class CloudFoundryActuatorAutoConfigurationTests {
HttpMessageConvertersAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class,
RestTemplateAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class,
- ServletEndpointAutoConfiguration.class,
+ ManagementContextAutoConfiguration.class,
+ ServletManagementContextAutoConfiguration.class,
+ EndpointAutoConfiguration.class,
CloudFoundryActuatorAutoConfiguration.class);
}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java
similarity index 94%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java
index 239f82ca9f..46ae3be480 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryAuthorizationExceptionTests.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import org.junit.Test;
-import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason;
+import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason;
import org.springframework.http.HttpStatus;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java
similarity index 93%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java
index 59e42ac6bd..fdf12d908c 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundryMvcWebEndpointIntegrationTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import java.util.Arrays;
import java.util.Collections;
@@ -24,15 +24,15 @@ import java.util.function.Consumer;
import org.junit.Test;
-import org.springframework.boot.endpoint.CachingConfiguration;
-import org.springframework.boot.endpoint.ConversionServiceOperationParameterMapper;
-import org.springframework.boot.endpoint.Endpoint;
-import org.springframework.boot.endpoint.OperationParameterMapper;
-import org.springframework.boot.endpoint.ReadOperation;
-import org.springframework.boot.endpoint.Selector;
-import org.springframework.boot.endpoint.WriteOperation;
+import org.springframework.boot.actuate.endpoint.OperationParameterMapper;
+import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
+import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
+import org.springframework.boot.actuate.endpoint.annotation.Selector;
+import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
+import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration;
+import org.springframework.boot.actuate.endpoint.convert.ConversionServiceOperationParameterMapper;
+import org.springframework.boot.actuate.endpoint.web.annotation.WebAnnotationEndpointDiscoverer;
import org.springframework.boot.endpoint.web.EndpointMapping;
-import org.springframework.boot.endpoint.web.WebAnnotationEndpointDiscoverer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
import org.springframework.context.ApplicationContext;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptorTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptorTests.java
similarity index 97%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptorTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptorTests.java
index 47766ab31f..8ecb75725a 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityInterceptorTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityInterceptorTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import org.junit.Before;
import org.junit.Test;
@@ -22,7 +22,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason;
+import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.MockHttpServletRequest;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityServiceTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityServiceTests.java
similarity index 98%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityServiceTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityServiceTests.java
index a5cf377bd5..5eb2396cdf 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/CloudFoundrySecurityServiceTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/CloudFoundrySecurityServiceTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import java.util.Map;
@@ -23,7 +23,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason;
+import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason;
import org.springframework.boot.test.web.client.MockServerRestTemplateCustomizer;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpStatus;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java
similarity index 97%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java
index df585067b1..2a00eed556 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/SkipSslVerificationHttpRequestFactoryTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import javax.net.ssl.SSLHandshakeException;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenTests.java
similarity index 96%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenTests.java
index 37ac32ecd6..7a885e2939 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenTests.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason;
+import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason;
import org.springframework.util.Base64Utils;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenValidatorTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidatorTests.java
similarity index 98%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenValidatorTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidatorTests.java
index a3adfcc658..8891dbe2ab 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/cloudfoundry/TokenValidatorTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/TokenValidatorTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.cloudfoundry;
+package org.springframework.boot.actuate.autoconfigure.cloudfoundry;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -37,7 +37,7 @@ import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
-import org.springframework.boot.actuate.cloudfoundry.CloudFoundryAuthorizationException.Reason;
+import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryAuthorizationException.Reason;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.util.Base64Utils;
import org.springframework.util.StreamUtils;
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..c9c70ec474
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointAutoConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.condition;
+
+import org.junit.Test;
+
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link AutoConfigurationReportEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class AutoConfigurationReportEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations
+ .of(AutoConfigurationReportEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(AutoConfigurationReportEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.autoconfig.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(AutoConfigurationReportEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpointTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointTests.java
similarity index 94%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpointTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointTests.java
index c9a97ba586..a236519015 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/AutoConfigurationReportEndpointTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/condition/AutoConfigurationReportEndpointTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint;
+package org.springframework.boot.actuate.autoconfigure.condition;
import java.util.Arrays;
import java.util.Collections;
@@ -23,7 +23,7 @@ import javax.annotation.PostConstruct;
import org.junit.Test;
-import org.springframework.boot.actuate.endpoint.AutoConfigurationReportEndpoint.Report;
+import org.springframework.boot.actuate.autoconfigure.condition.AutoConfigurationReportEndpoint.Report;
import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..71a7916970
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.context;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.context.ShutdownEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link ShutdownEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class ShutdownEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(ShutdownEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.withPropertyValues("endpoints.shutdown.enabled:true").run(
+ (context) -> assertThat(context).hasSingleBean(ShutdownEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.shutdown.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(ShutdownEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..48a3cf7836
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.context.properties;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link ConfigurationPropertiesReportEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class ConfigurationPropertiesReportEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations
+ .of(ConfigurationPropertiesReportEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(ConfigurationPropertiesReportEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.configprops.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(ConfigurationPropertiesReportEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..d5b207048b
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/couchbase/CouchbaseHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.couchbase;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.couchbase.CouchbaseHealthIndicator;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.couchbase.core.CouchbaseOperations;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link CouchbaseHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class CouchbaseHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(CouchbaseConfiguration.class,
+ CouchbaseHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(CouchbaseHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.couchbase.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(CouchbaseHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @AutoConfigureBefore(CouchbaseHealthIndicatorAutoConfiguration.class)
+ protected static class CouchbaseConfiguration {
+
+ @Bean
+ public CouchbaseOperations couchbaseOperations() {
+ return mock(CouchbaseOperations.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..d1b0e39594
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/elasticsearch/ElasticsearchHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.elasticsearch;
+
+import io.searchbox.client.JestClient;
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.elasticsearch.ElasticsearchHealthIndicator;
+import org.springframework.boot.actuate.elasticsearch.ElasticsearchJestHealthIndicator;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration;
+import org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link ElasticsearchHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class ElasticsearchHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(ElasticsearchAutoConfiguration.class,
+ ElasticsearchHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner
+ .withPropertyValues("spring.data.elasticsearch.cluster-nodes:localhost:0")
+ .withSystemProperties("es.set.netty.runtime.available.processors=false")
+ .run((context) -> assertThat(context)
+ .hasSingleBean(ElasticsearchHealthIndicator.class)
+ .doesNotHaveBean(ElasticsearchJestHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenUsingJestClientShouldCreateIndicator() throws Exception {
+ this.contextRunner.withUserConfiguration(JestClientConfiguration.class)
+ .withSystemProperties("es.set.netty.runtime.available.processors=false")
+ .run((context) -> assertThat(context)
+ .hasSingleBean(ElasticsearchJestHealthIndicator.class)
+ .doesNotHaveBean(ElasticsearchHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner
+ .withPropertyValues("management.health.elasticsearch.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(ElasticsearchHealthIndicator.class)
+ .doesNotHaveBean(ElasticsearchJestHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @AutoConfigureBefore(JestAutoConfiguration.class)
+ protected static class JestClientConfiguration {
+
+ @Bean
+ public JestClient jestClient() {
+ return mock(JestClient.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java
similarity index 67%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java
index 9eaad931cc..fcc5018739 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/CachingConfigurationFactoryTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/DefaultCachingConfigurationFactoryTests.java
@@ -14,30 +14,31 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.endpoint;
import org.junit.Test;
-import org.springframework.boot.endpoint.CachingConfiguration;
+import org.springframework.boot.actuate.endpoint.cache.CachingConfiguration;
+import org.springframework.boot.actuate.endpoint.cache.CachingConfigurationFactory;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
/**
- * Tests for {@link CachingConfigurationFactory}.
+ * Tests for {@link DefaultCachingConfigurationFactory}.
*
* @author Stephane Nicoll
*/
-public class CachingConfigurationFactoryTests {
+public class DefaultCachingConfigurationFactoryTests {
private final MockEnvironment environment = new MockEnvironment();
- private final CachingConfigurationFactory factory = new CachingConfigurationFactory(
+ private final CachingConfigurationFactory factory = new DefaultCachingConfigurationFactory(
this.environment);
@Test
public void defaultConfiguration() {
- CachingConfiguration configuration = this.factory.apply("test");
+ CachingConfiguration configuration = this.factory.getCachingConfiguration("test");
assertThat(configuration).isNotNull();
assertThat(configuration.getTimeToLive()).isEqualTo(0);
}
@@ -45,7 +46,7 @@ public class CachingConfigurationFactoryTests {
@Test
public void userConfiguration() {
this.environment.setProperty("endpoints.test.cache.time-to-live", "500");
- CachingConfiguration configuration = this.factory.apply("test");
+ CachingConfiguration configuration = this.factory.getCachingConfiguration("test");
assertThat(configuration).isNotNull();
assertThat(configuration.getTimeToLive()).isEqualTo(500);
}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProviderTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProviderTests.java
similarity index 98%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProviderTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProviderTests.java
index 7d4d41d319..9848b2d76a 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/support/EndpointEnablementProviderTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointEnablementProviderTests.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.support;
+package org.springframework.boot.actuate.autoconfigure.endpoint;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.springframework.boot.endpoint.EndpointExposure;
+import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.mock.env.MockEnvironment;
import org.springframework.util.ObjectUtils;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpointTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java
similarity index 96%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpointTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java
index c93ce7562a..0c9f7c756e 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/ConditionalOnEnabledEndpointTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint;
+package org.springframework.boot.actuate.autoconfigure.endpoint.condition;
import org.junit.Test;
-import org.springframework.boot.endpoint.Endpoint;
-import org.springframework.boot.endpoint.EndpointExposure;
-import org.springframework.boot.endpoint.jmx.JmxEndpointExtension;
-import org.springframework.boot.endpoint.web.WebEndpointExtension;
+import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
+import org.springframework.boot.actuate.endpoint.annotation.EndpointExposure;
+import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointExtension;
+import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointExtension;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactoryTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactoryTests.java
similarity index 98%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactoryTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactoryTests.java
index d9664093e9..86b34f36c1 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/DefaultEndpointObjectNameFactoryTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/jmx/DefaultEndpointObjectNameFactoryTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.endpoint.jmx;
import java.util.Collections;
@@ -24,7 +24,7 @@ import javax.management.ObjectName;
import org.junit.Test;
-import org.springframework.boot.endpoint.jmx.EndpointMBean;
+import org.springframework.boot.actuate.endpoint.jmx.EndpointMBean;
import org.springframework.mock.env.MockEnvironment;
import org.springframework.util.ObjectUtils;
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..156989e0ac
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.env;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.env.EnvironmentEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link EnvironmentEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class EnvironmentEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(EnvironmentEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(EnvironmentEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.env.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(EnvironmentEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..0d92ffb7c1
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfigurationTests.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.flyway;
+
+import org.flywaydb.core.Flyway;
+import org.junit.Test;
+
+import org.springframework.boot.actuate.flyway.FlywayEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link FlywayEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class FlywayEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(FlywayEndpointAutoConfiguration.class))
+ .withUserConfiguration(FlywayConfiguration.class);
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(FlywayEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.flyway.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(FlywayEndpoint.class));
+ }
+
+ @Configuration
+ static class FlywayConfiguration {
+
+ @Bean
+ public Flyway flyway() {
+ return mock(Flyway.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java
similarity index 81%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java
index 72fe5b808e..7c59675879 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint;
+package org.springframework.boot.actuate.autoconfigure.health;
import org.junit.Test;
import reactor.core.publisher.Mono;
-import org.springframework.boot.actuate.endpoint.HealthEndpoint;
import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthEndpoint;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.ReactiveHealthIndicator;
import org.springframework.boot.actuate.health.Status;
@@ -36,27 +36,29 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
/**
- * Tests for {@link EndpointAutoConfiguration}.
+ * Tests for {@link HealthEndpointAutoConfiguration}.
*
* @author Stephane Nicoll
+ * @author Phillip Webb
*/
-public class EndpointAutoConfigurationTests {
+public class HealthEndpointAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
- .withConfiguration(AutoConfigurations.of(EndpointAutoConfiguration.class));
+ .withConfiguration(
+ AutoConfigurations.of(HealthEndpointAutoConfiguration.class));
@Test
public void healthEndpointAdaptReactiveHealthIndicator() {
this.contextRunner
.withUserConfiguration(ReactiveHealthIndicatorConfiguration.class)
.run((context) -> {
- ReactiveHealthIndicator reactiveHealthIndicator = context.getBean(
+ ReactiveHealthIndicator indicator = context.getBean(
"reactiveHealthIndicator", ReactiveHealthIndicator.class);
- verify(reactiveHealthIndicator, times(0)).health();
+ verify(indicator, times(0)).health();
Health health = context.getBean(HealthEndpoint.class).health();
assertThat(health.getStatus()).isEqualTo(Status.UP);
assertThat(health.getDetails()).containsOnlyKeys("reactive");
- verify(reactiveHealthIndicator, times(1)).health();
+ verify(indicator, times(1)).health();
});
}
@@ -64,17 +66,17 @@ public class EndpointAutoConfigurationTests {
public void healthEndpointMergeRegularAndReactive() {
this.contextRunner.withUserConfiguration(HealthIndicatorConfiguration.class,
ReactiveHealthIndicatorConfiguration.class).run((context) -> {
- HealthIndicator simpleHealthIndicator = context
- .getBean("simpleHealthIndicator", HealthIndicator.class);
+ HealthIndicator indicator = context.getBean("simpleHealthIndicator",
+ HealthIndicator.class);
ReactiveHealthIndicator reactiveHealthIndicator = context.getBean(
"reactiveHealthIndicator", ReactiveHealthIndicator.class);
- verify(simpleHealthIndicator, times(0)).health();
+ verify(indicator, times(0)).health();
verify(reactiveHealthIndicator, times(0)).health();
Health health = context.getBean(HealthEndpoint.class).health();
assertThat(health.getStatus()).isEqualTo(Status.UP);
assertThat(health.getDetails()).containsOnlyKeys("simple",
"reactive");
- verify(simpleHealthIndicator, times(1)).health();
+ verify(indicator, times(1)).health();
verify(reactiveHealthIndicator, times(1)).health();
});
}
@@ -102,5 +104,4 @@ public class EndpointAutoConfigurationTests {
}
}
-
}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..623204b643
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.health;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthAggregator;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.actuate.health.OrderedHealthAggregator;
+import org.springframework.boot.actuate.health.Status;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link HealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ * @author Stephane Nicoll
+ */
+public class HealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runWhenNoOtherIndicatorsShouldCreateDefaultApplicationHealthIndicator()
+ throws Exception {
+ this.contextRunner
+ .run((context) -> assertThat(context).getBean(HealthIndicator.class)
+ .isInstanceOf(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenHasDefinedIndicatorShouldNotCreateDefaultApplicationHealthIndicator()
+ throws Exception {
+ this.contextRunner.withUserConfiguration(CustomHealthIndicatorConfiguration.class)
+ .run((context) -> assertThat(context).getBean(HealthIndicator.class)
+ .isInstanceOf(CustomHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenHasDefaultsDisabledAndNoSingleIndicatorEnabledShouldCreateDefaultApplicationHealthIndicator()
+ throws Exception {
+ this.contextRunner.withUserConfiguration(CustomHealthIndicatorConfiguration.class)
+ .withPropertyValues("management.health.defaults.enabled:false")
+ .run((context) -> assertThat(context).getBean(HealthIndicator.class)
+ .isInstanceOf(ApplicationHealthIndicator.class));
+
+ }
+
+ @Test
+ public void runWhenHasDefaultsDisabledAndSingleIndicatorEnabledShouldCreateEnabledIndicator()
+ throws Exception {
+ this.contextRunner.withUserConfiguration(CustomHealthIndicatorConfiguration.class)
+ .withPropertyValues("management.health.defaults.enabled:false",
+ "management.health.custom.enabled:true")
+ .run((context) -> assertThat(context).getBean(HealthIndicator.class)
+ .isInstanceOf(CustomHealthIndicator.class));
+
+ }
+
+ @Test
+ public void runShouldCreateOrderedHealthAggregator() throws Exception {
+ this.contextRunner
+ .run((context) -> assertThat(context).getBean(HealthAggregator.class)
+ .isInstanceOf(OrderedHealthAggregator.class));
+ }
+
+ @Test
+ public void runWhenHasCustomOrderPropertyShouldCreateOrderedHealthAggregator()
+ throws Exception {
+ this.contextRunner.withPropertyValues("management.health.status.order:UP,DOWN")
+ .run((context) -> {
+ OrderedHealthAggregator aggregator = context
+ .getBean(OrderedHealthAggregator.class);
+ Map healths = new LinkedHashMap<>();
+ healths.put("foo", Health.up().build());
+ healths.put("bar", Health.down().build());
+ Health aggregate = aggregator.aggregate(healths);
+ assertThat(aggregate.getStatus()).isEqualTo(Status.UP);
+ });
+ }
+
+ @Test
+ public void runWhenHasCustomHealthAggregatorShouldNotCreateOrderedHealthAggregator()
+ throws Exception {
+ this.contextRunner
+ .withUserConfiguration(CustomHealthAggregatorConfiguration.class)
+ .run((context) -> assertThat(context).getBean(HealthAggregator.class)
+ .isNotInstanceOf(OrderedHealthAggregator.class));
+ }
+
+ @Configuration
+ static class CustomHealthIndicatorConfiguration {
+
+ @Bean
+ @ConditionalOnEnabledHealthIndicator("custom")
+ public HealthIndicator customHealthIndicator() {
+ return new CustomHealthIndicator();
+ }
+
+ }
+
+ static class CustomHealthIndicator implements HealthIndicator {
+
+ @Override
+ public Health health() {
+ return Health.down().build();
+ }
+
+ }
+
+ @Configuration
+ static class CustomHealthAggregatorConfiguration {
+
+ @Bean
+ public HealthAggregator healthAggregator() {
+ return (healths) -> Health.down().build();
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java
new file mode 100644
index 0000000000..2d4e918d43
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointReactiveManagementContextConfigurationTests.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.health;
+
+import java.util.Map;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.health.HealthReactiveWebEndpointExtension;
+import org.springframework.boot.actuate.health.HealthStatusHttpMapper;
+import org.springframework.boot.actuate.health.StatusReactiveWebEndpointExtension;
+import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link HealthWebEndpointManagementContextConfiguration} in a reactive
+ * environment.
+ *
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Phillip Webb
+ */
+public class HealthWebEndpointReactiveManagementContextConfigurationTests {
+
+ private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner()
+ .withUserConfiguration(HealthIndicatorAutoConfiguration.class,
+ HealthEndpointAutoConfiguration.class,
+ HealthWebEndpointManagementContextConfiguration.class);
+
+ @Test
+ public void runShouldCreateExtensionBeans() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(StatusReactiveWebEndpointExtension.class)
+ .hasSingleBean(HealthReactiveWebEndpointExtension.class));
+ }
+
+ @Test
+ public void runWhenHealthEndpointIsDisabledShouldNotCreateExtensionBeans()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.health.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(HealthReactiveWebEndpointExtension.class));
+ }
+
+ @Test
+ public void runWhenStatusEndpointIsDisabledShouldNotCreateExtensionBeans()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.status.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(StatusReactiveWebEndpointExtension.class));
+ }
+
+ @Test
+ public void runWithCustomHealthMappingShouldMapStatusCode() throws Exception {
+ this.contextRunner
+ .withPropertyValues("management.health.status.http-mapping.CUSTOM=500")
+ .run((context) -> {
+ Object extension = context
+ .getBean(HealthReactiveWebEndpointExtension.class);
+ HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils
+ .getField(extension, "statusHttpMapper");
+ Map statusMappings = mapper.getStatusMapping();
+ assertThat(statusMappings).containsEntry("DOWN", 503);
+ assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503);
+ assertThat(statusMappings).containsEntry("CUSTOM", 500);
+ });
+ }
+
+ @Test
+ public void runWithCustomStatusMappingShouldMapStatusCode() throws Exception {
+ this.contextRunner
+ .withPropertyValues("management.health.status.http-mapping.CUSTOM=500")
+ .run((context) -> {
+ Object extension = context
+ .getBean(StatusReactiveWebEndpointExtension.class);
+ HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils
+ .getField(extension, "statusHttpMapper");
+ Map statusMappings = mapper.getStatusMapping();
+ assertThat(statusMappings).containsEntry("DOWN", 503);
+ assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503);
+ assertThat(statusMappings).containsEntry("CUSTOM", 500);
+ });
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java
new file mode 100644
index 0000000000..1f285025af
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthWebEndpointServletManagementContextConfigurationTests.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.health;
+
+import java.util.Map;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.health.HealthStatusHttpMapper;
+import org.springframework.boot.actuate.health.HealthWebEndpointExtension;
+import org.springframework.boot.actuate.health.StatusWebEndpointExtension;
+import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link HealthWebEndpointManagementContextConfiguration} in a servlet
+ * environment.
+ *
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Phillip Webb
+ */
+public class HealthWebEndpointServletManagementContextConfigurationTests {
+
+ private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
+ .withUserConfiguration(HealthIndicatorAutoConfiguration.class,
+ HealthEndpointAutoConfiguration.class,
+ HealthWebEndpointManagementContextConfiguration.class);
+
+ @Test
+ public void runShouldCreateExtensionBeans() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(StatusWebEndpointExtension.class)
+ .hasSingleBean(HealthWebEndpointExtension.class));
+ }
+
+ @Test
+ public void runWhenHealthEndpointIsDisabledShouldNotCreateExtensionBeans()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.health.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(HealthWebEndpointExtension.class));
+ }
+
+ @Test
+ public void runWhenStatusEndpointIsDisabledShouldNotCreateExtensionBeans()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.status.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(StatusWebEndpointExtension.class));
+ }
+
+ @Test
+ public void runWithCustomHealthMappingShouldMapStatusCode() throws Exception {
+ this.contextRunner
+ .withPropertyValues("management.health.status.http-mapping.CUSTOM=500")
+ .run((context) -> {
+ Object extension = context.getBean(HealthWebEndpointExtension.class);
+ HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils
+ .getField(extension, "statusHttpMapper");
+ Map statusMappings = mapper.getStatusMapping();
+ assertThat(statusMappings).containsEntry("DOWN", 503);
+ assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503);
+ assertThat(statusMappings).containsEntry("CUSTOM", 500);
+ });
+ }
+
+ @Test
+ public void runWithCustomStatusMappingShouldMapStatusCode() throws Exception {
+ this.contextRunner
+ .withPropertyValues("management.health.status.http-mapping.CUSTOM=500")
+ .run((context) -> {
+ Object extension = context.getBean(StatusWebEndpointExtension.class);
+ HealthStatusHttpMapper mapper = (HealthStatusHttpMapper) ReflectionTestUtils
+ .getField(extension, "statusHttpMapper");
+ Map statusMappings = mapper.getStatusMapping();
+ assertThat(statusMappings).containsEntry("DOWN", 503);
+ assertThat(statusMappings).containsEntry("OUT_OF_SERVICE", 503);
+ assertThat(statusMappings).containsEntry("CUSTOM", 500);
+ });
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoContributorAutoConfigurationTests.java
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..d626a5beae
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.info;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.info.InfoEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link InfoEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class InfoEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(InfoEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.withPropertyValues("endpoints.shutdown.enabled:true")
+ .run((context) -> assertThat(context).hasSingleBean(InfoEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.info.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(InfoEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java
new file mode 100644
index 0000000000..621d3bea07
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/EndpointAutoConfigurationClasses.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.condition.AutoConfigurationReportEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.trace.TraceEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.RequestMappingEndpointAutoConfiguration;
+
+/**
+ * A list of all endpoint auto-configuration classes for use in tests.
+ */
+final class EndpointAutoConfigurationClasses {
+
+ static final Class>[] ALL;
+
+ static {
+ List> all = new ArrayList<>();
+ all.add(AuditEventsEndpointAutoConfiguration.class);
+ all.add(BeansEndpointAutoConfiguration.class);
+ all.add(AutoConfigurationReportEndpointAutoConfiguration.class);
+ all.add(ConfigurationPropertiesReportEndpointAutoConfiguration.class);
+ all.add(ShutdownEndpointAutoConfiguration.class);
+ all.add(EnvironmentEndpointAutoConfiguration.class);
+ all.add(HealthEndpointAutoConfiguration.class);
+ all.add(InfoEndpointAutoConfiguration.class);
+ all.add(ThreadDumpEndpointAutoConfiguration.class);
+ all.add(MetricsEndpointAutoConfiguration.class);
+ all.add(TraceEndpointAutoConfiguration.class);
+ all.add(RequestMappingEndpointAutoConfiguration.class);
+ ALL = all.toArray(new Class>[] {});
+ }
+
+ private EndpointAutoConfigurationClasses() {
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java
similarity index 91%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java
index 089885f71f..77c0921ccb 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/JmxEndpointInfrastructureAutoConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JmxEndpointIntegrationTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
@@ -27,6 +27,7 @@ import javax.management.ReflectionException;
import org.junit.Test;
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -35,17 +36,18 @@ import org.springframework.util.StringUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
- * Tests for {@link EndpointInfrastructureAutoConfiguration} with JMX.
+ * Integration tests for endpints over JMX.
*
* @author Stephane Nicoll
* @author Andy Wilkinson
*/
-public class JmxEndpointInfrastructureAutoConfigurationTests {
+public class JmxEndpointIntegrationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(JmxAutoConfiguration.class,
- EndpointAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class));
+ EndpointAutoConfiguration.class, JmxEndpointAutoConfiguration.class))
+ .withConfiguration(
+ AutoConfigurations.of(EndpointAutoConfigurationClasses.ALL));
@Test
public void jmxEndpointsAreExposed() {
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JolokiaManagementContextConfigurationIntegrationTests.java
similarity index 87%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationIntegrationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JolokiaManagementContextConfigurationIntegrationTests.java
index 1d4ff90374..a33d9ff43e 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationIntegrationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JolokiaManagementContextConfigurationIntegrationTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.jolokia;
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@@ -26,9 +26,10 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.jolokia.JolokiaManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
@@ -101,10 +102,10 @@ public class JolokiaManagementContextConfigurationIntegrationTests {
@Configuration
@MinimalWebConfiguration
@Import({ JacksonAutoConfiguration.class,
- HttpMessageConvertersAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class,
+ HttpMessageConvertersAutoConfiguration.class, EndpointAutoConfiguration.class,
+ ServletManagementContextAutoConfiguration.class,
ManagementContextAutoConfiguration.class,
- ServletEndpointAutoConfiguration.class })
+ ServletManagementContextAutoConfiguration.class })
protected static class Application {
}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java
similarity index 89%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java
index 7b5f3a2d3d..ac4da1a7c2 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/WebEndpointAutoConfigurationIntegrationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.web;
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
import org.junit.Test;
import org.springframework.boot.SpringBootConfiguration;
-import org.springframework.boot.actuate.endpoint.web.HealthReactiveWebEndpointExtension;
-import org.springframework.boot.actuate.endpoint.web.HealthWebEndpointExtension;
-import org.springframework.boot.actuate.endpoint.web.StatusReactiveWebEndpointExtension;
-import org.springframework.boot.actuate.endpoint.web.StatusWebEndpointExtension;
+import org.springframework.boot.actuate.health.HealthReactiveWebEndpointExtension;
+import org.springframework.boot.actuate.health.HealthWebEndpointExtension;
+import org.springframework.boot.actuate.health.StatusReactiveWebEndpointExtension;
+import org.springframework.boot.actuate.health.StatusWebEndpointExtension;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration;
import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration;
@@ -52,10 +52,12 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Andy Wilkinson
*/
-public class WebEndpointAutoConfigurationIntegrationTests {
+public class WebEndpointsAutoConfigurationIntegrationTests {
@Test
public void healthEndpointWebExtensionIsAutoConfigured() {
+ servletWebRunner()
+ .run((context) -> context.getBean(WebEndpointTestApplication.class));
servletWebRunner().run((context) -> assertThat(context)
.hasSingleBean(HealthWebEndpointExtension.class));
}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java
similarity index 91%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java
index a53c408d9c..dd3e6cb33f 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointCorsIntegrationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointCorsIntegrationTests.java
@@ -14,16 +14,17 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint.mvc;
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
import org.junit.Before;
import org.junit.Test;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration;
-import org.springframework.boot.actuate.endpoint.BeansEndpoint;
+import org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.beans.BeansEndpoint;
import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport;
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
@@ -51,8 +52,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
* Integration tests for the actuator endpoints' CORS support
*
* @author Andy Wilkinson
+ * @see WebMvcEndpointManagementContextConfiguration
*/
-public class MvcEndpointCorsIntegrationTests {
+public class WebMvcEndpointCorsIntegrationTests {
private AnnotationConfigWebApplicationContext context;
@@ -63,9 +65,9 @@ public class MvcEndpointCorsIntegrationTests {
this.context.register(JacksonAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
WebMvcAutoConfiguration.class, DispatcherServletAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class,
EndpointAutoConfiguration.class, ManagementContextAutoConfiguration.class,
- ServletEndpointAutoConfiguration.class);
+ ServletManagementContextAutoConfiguration.class,
+ BeansEndpointAutoConfiguration.class);
TestPropertyValues.of("endpoints.default.web.enabled:true").applyTo(this.context);
}
@@ -212,6 +214,7 @@ public class MvcEndpointCorsIntegrationTests {
protected void configure(HttpSecurity http) throws Exception {
http.cors();
}
+
}
}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java
similarity index 87%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java
index a08e6abd0a..ec97f7b94c 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/infrastructure/WebMvcEndpointInfrastructureAutoConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointExposureIntegrationTests.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure;
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
-import org.apache.http.HttpStatus;
import org.junit.Test;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
@@ -29,6 +29,7 @@ import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactor
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@@ -37,11 +38,12 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.request;
/**
- * Tests for {@link EndpointInfrastructureAutoConfiguration} with Web MVC.
+ * Integration tests for Endpoints over Spring MVC.
*
* @author Stephane Nicoll
+ * @author Phillip Webb
*/
-public class WebMvcEndpointInfrastructureAutoConfigurationTests {
+public class WebMvcEndpointExposureIntegrationTests {
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(
@@ -50,9 +52,13 @@ public class WebMvcEndpointInfrastructureAutoConfigurationTests {
JacksonAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class,
WebMvcAutoConfiguration.class, EndpointAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class,
+ EndpointAutoConfiguration.class,
ManagementContextAutoConfiguration.class,
- ServletEndpointAutoConfiguration.class));
+ ServletManagementContextAutoConfiguration.class,
+ ManagementContextAutoConfiguration.class,
+ ServletManagementContextAutoConfiguration.class))
+ .withConfiguration(
+ AutoConfigurations.of(EndpointAutoConfigurationClasses.ALL));
@Test
public void webEndpointsAreDisabledByDefault() {
@@ -118,10 +124,10 @@ public class WebMvcEndpointInfrastructureAutoConfigurationTests {
path = "/application/" + path;
MvcResult mvcResult = mockMvc.perform(request(method, path)).andReturn();
int status = mvcResult.getResponse().getStatus();
- if (status == HttpStatus.SC_OK) {
+ if (status == HttpStatus.OK.value()) {
return true;
}
- else if (status == HttpStatus.SC_NOT_FOUND) {
+ if (status == HttpStatus.NOT_FOUND.value()) {
return false;
}
throw new IllegalStateException(String
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java
similarity index 90%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java
index a1224375bb..254006b84d 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebMvcEndpointIntegrationTests.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint.mvc;
+package org.springframework.boot.actuate.autoconfigure.integrationtest;
import org.junit.After;
import org.junit.Test;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.EndpointInfrastructureAutoConfiguration;
-import org.springframework.boot.actuate.autoconfigure.endpoint.infrastructure.ServletEndpointAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration;
@@ -54,7 +54,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
*
* @author Andy Wilkinson
*/
-public class MvcEndpointIntegrationTests {
+public class WebMvcEndpointIntegrationTests {
private AnnotationConfigWebApplicationContext context;
@@ -112,12 +112,12 @@ public class MvcEndpointIntegrationTests {
}
@ImportAutoConfiguration({ JacksonAutoConfiguration.class,
- EndpointInfrastructureAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class, EndpointAutoConfiguration.class,
- ServletEndpointAutoConfiguration.class, AuditAutoConfiguration.class,
+ ServletManagementContextAutoConfiguration.class, AuditAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class, WebMvcAutoConfiguration.class,
ManagementContextAutoConfiguration.class, AuditAutoConfiguration.class,
- DispatcherServletAutoConfiguration.class })
+ DispatcherServletAutoConfiguration.class,
+ BeansEndpointAutoConfiguration.class })
static class DefaultConfiguration {
}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..dae1a9a252
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jdbc/DataSourceHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.jdbc;
+
+import javax.sql.DataSource;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.health.CompositeHealthIndicator;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link DataSourceHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class DataSourceHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class,
+ DataSourceHealthIndicatorAutoConfiguration.class))
+ .withPropertyValues("spring.datasource.initialize=false");
+
+ @Test
+ public void runShouldCreateIndicator() {
+ this.contextRunner.run((context) -> {
+ context.getBean(DataSourceHealthIndicator.class);
+ assertThat(context).hasSingleBean(DataSourceHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class);
+ });
+ }
+
+ @Test
+ public void runWhenMultipleDataSourceBeansShouldCreateCompositeIndicator()
+ throws Exception {
+ this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class,
+ DataSourceConfig.class).run((context) -> {
+ assertThat(context).hasSingleBean(HealthIndicator.class);
+ HealthIndicator indicator = context
+ .getBean(CompositeHealthIndicator.class);
+ assertThat(indicator.health().getDetails())
+ .containsOnlyKeys("dataSource", "testDataSource");
+ });
+ }
+
+ @Test
+ public void runShouldFilterRoutingDataSource() throws Exception {
+ this.contextRunner
+ .withUserConfiguration(EmbeddedDataSourceConfiguration.class,
+ RoutingDatasourceConfig.class)
+ .run((context) -> assertThat(context)
+ .hasSingleBean(DataSourceHealthIndicator.class)
+ .doesNotHaveBean(CompositeHealthIndicator.class));
+ }
+
+ @Test
+ public void runWithValidationQueryPropertyShouldUseCustomQuery() {
+ this.contextRunner
+ .withUserConfiguration(DataSourceConfig.class,
+ DataSourcePoolMetadataProvidersConfiguration.class)
+ .withPropertyValues(
+ "spring.datasource.test.validation-query:SELECT from FOOBAR")
+ .run((context) -> {
+ assertThat(context).hasSingleBean(HealthIndicator.class);
+ DataSourceHealthIndicator indicator = context
+ .getBean(DataSourceHealthIndicator.class);
+ assertThat(indicator.getQuery()).isEqualTo("SELECT from FOOBAR");
+ });
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
+ .withPropertyValues("management.health.db.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(DataSourceHealthIndicator.class)
+ .doesNotHaveBean(CompositeHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @EnableConfigurationProperties
+ protected static class DataSourceConfig {
+
+ @Bean
+ @ConfigurationProperties(prefix = "spring.datasource.test")
+ public DataSource testDataSource() {
+ return DataSourceBuilder.create()
+ .type(org.apache.tomcat.jdbc.pool.DataSource.class)
+ .driverClassName("org.hsqldb.jdbc.JDBCDriver")
+ .url("jdbc:hsqldb:mem:test").username("sa").build();
+ }
+
+ }
+
+ @Configuration
+ protected static class RoutingDatasourceConfig {
+
+ @Bean
+ AbstractRoutingDataSource routingDataSource() {
+ return mock(AbstractRoutingDataSource.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..b98a2cd266
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jms/JmsHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.jms;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.jms.JmsHealthIndicator;
+import org.springframework.boot.actuate.ldap.LdapHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link JmsHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class JmsHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(ActiveMQAutoConfiguration.class,
+ JmsHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(JmsHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.jms.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(LdapHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java
similarity index 91%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java
index 567ffb47a5..0db7c5ee50 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaManagementContextConfigurationTests.java
@@ -18,7 +18,8 @@ package org.springframework.boot.actuate.autoconfigure.jolokia;
import org.junit.Test;
-import org.springframework.boot.actuate.autoconfigure.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
import org.springframework.boot.test.context.runner.ContextConsumer;
@@ -40,12 +41,14 @@ public class JolokiaManagementContextConfigurationTests {
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.withConfiguration(
AutoConfigurations.of(ManagementContextAutoConfiguration.class,
+ ServletManagementContextAutoConfiguration.class,
JolokiaManagementContextConfiguration.class));
@Test
public void jolokiaIsEnabledByDefault() {
this.contextRunner.withPropertyValues("management.jolokia.enabled=true")
.run((context) -> {
+ context.getBean(ServletRegistrationBean.class);
assertThat(context).hasSingleBean(ServletRegistrationBean.class);
ServletRegistrationBean> registrationBean = context
.getBean(ServletRegistrationBean.class);
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..1e17410306
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.ldap;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.ldap.LdapHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.ldap.core.LdapOperations;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link LdapHealthIndicatorAutoConfiguration}.
+ *
+ * @author EddĂș MelĂ©ndez
+ * @author Stephane Nicoll
+ */
+public class LdapHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withUserConfiguration(LdapConfiguration.class).withConfiguration(
+ AutoConfigurations.of(LdapHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(LdapHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.ldap.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(LdapHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @AutoConfigureBefore(LdapHealthIndicatorAutoConfiguration.class)
+ protected static class LdapConfiguration {
+
+ @Bean
+ public LdapOperations ldapOperations() {
+ return mock(LdapOperations.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..5d98f702e0
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfigurationTests.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.liquibase;
+
+import liquibase.integration.spring.SpringLiquibase;
+import org.junit.Test;
+
+import org.springframework.boot.actuate.liquibase.LiquibaseEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link LiquibaseEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class LiquibaseEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(LiquibaseEndpointAutoConfiguration.class))
+ .withUserConfiguration(LiquibaseConfiguration.class);
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(LiquibaseEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.liquibase.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(LiquibaseEndpoint.class));
+ }
+
+ @Configuration
+ static class LiquibaseConfiguration {
+
+ @Bean
+ public SpringLiquibase liquibase() {
+ return mock(SpringLiquibase.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java
new file mode 100644
index 0000000000..ec4995b9df
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointManagementContextConfigurationTests.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.logging;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.logger.LogFileWebEndpoint;
+import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link LogFileWebEndpointManagementContextConfiguration}.
+ *
+ * @author Andy Wilkinson
+ * @author Stephane Nicoll
+ * @author Phillip Webb
+ */
+public class LogFileWebEndpointManagementContextConfigurationTests {
+
+ private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
+ .withUserConfiguration(
+ LogFileWebEndpointManagementContextConfiguration.class);
+
+ @Test
+ public void logFileWebEndpointIsAutoConfiguredWhenLoggingFileIsSet() {
+ this.contextRunner.withPropertyValues("logging.file:test.log").run(
+ (context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class));
+ }
+
+ @Test
+ public void logFileWebEndpointIsAutoConfiguredWhenLoggingPathIsSet() {
+ this.contextRunner.withPropertyValues("logging.path:test/logs").run(
+ (context) -> assertThat(context).hasSingleBean(LogFileWebEndpoint.class));
+ }
+
+ @Test
+ public void logFileWebEndpointIsAutoConfiguredWhenExternalFileIsSet() {
+ this.contextRunner
+ .withPropertyValues("endpoints.logfile.external-file:external.log")
+ .run((context) -> assertThat(context)
+ .hasSingleBean(LogFileWebEndpoint.class));
+ }
+
+ @Test
+ public void logFileWebEndpointCanBeDisabled() {
+ this.contextRunner
+ .withPropertyValues("logging.file:test.log",
+ "endpoints.logfile.enabled:false")
+ .run((context) -> assertThat(context)
+ .hasSingleBean(LogFileWebEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..f4c6420286
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfigurationTests.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.logging;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.logging.LoggersEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.logging.LoggingSystem;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link LoggersEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class LoggersEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(LoggersEndpointAutoConfiguration.class))
+ .withUserConfiguration(LoggingConfiguration.class);
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(LoggersEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.loggers.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(LoggersEndpoint.class));
+ }
+
+ @Configuration
+ static class LoggingConfiguration {
+
+ @Bean
+ public LoggingSystem loggingSystem() {
+ return mock(LoggingSystem.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..50b5842fb9
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mail/MailHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.mail;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.mail.MailHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link MailHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class MailHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(MailSenderAutoConfiguration.class,
+ MailHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class))
+ .withPropertyValues("spring.mail.host:smtp.example.com");
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(MailHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.mail.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(MailHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java
new file mode 100644
index 0000000000..0ff4b03328
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointManagementContextConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.management;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.management.HeapDumpWebEndpoint;
+import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link HeapDumpWebEndpointManagementContextConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class HeapDumpWebEndpointManagementContextConfigurationTests {
+
+ private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
+ .withPropertyValues("endpoints.default.web.enabled:true")
+ .withUserConfiguration(
+ HeapDumpWebEndpointManagementContextConfiguration.class);
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(HeapDumpWebEndpoint.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.heapdump.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(HeapDumpWebEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..31e1d84dae
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfigurationTests.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.management;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.management.ThreadDumpEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link ThreadDumpEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class ThreadDumpEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(ThreadDumpEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(ThreadDumpEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.threaddump.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(ThreadDumpEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java
similarity index 98%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java
index c15932d4bf..9d5bdb614f 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricExportAutoConfigurationTests.java
@@ -25,11 +25,11 @@ import org.junit.rules.ExpectedException;
import org.mockito.Mockito;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.boot.actuate.endpoint.MetricsEndpointMetricReader;
import org.springframework.boot.actuate.metrics.GaugeService;
import org.springframework.boot.actuate.metrics.Metric;
import org.springframework.boot.actuate.metrics.export.MetricCopyExporter;
import org.springframework.boot.actuate.metrics.export.MetricExporters;
+import org.springframework.boot.actuate.metrics.reader.MetricsEndpointMetricReader;
import org.springframework.boot.actuate.metrics.statsd.StatsdMetricWriter;
import org.springframework.boot.actuate.metrics.writer.GaugeWriter;
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricFilterAutoConfigurationTests.java
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricRepositoryAutoConfigurationTests.java
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsDropwizardAutoConfigurationTests.java
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..e54a557fd1
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.metrics;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.metrics.MetricsEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link MetricsEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class MetricsEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(MetricsEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(MetricsEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.metrics.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(MetricsEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java
similarity index 94%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java
index ac9d1bb043..49be636155 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/PublicMetricsAutoConfigurationTests.java
@@ -30,20 +30,20 @@ import org.junit.After;
import org.junit.Test;
import org.springframework.boot.actuate.autoconfigure.cache.CacheStatisticsAutoConfiguration;
-import org.springframework.boot.actuate.endpoint.CachePublicMetrics;
-import org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics;
-import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
-import org.springframework.boot.actuate.endpoint.PublicMetrics;
-import org.springframework.boot.actuate.endpoint.RichGaugeReaderPublicMetrics;
-import org.springframework.boot.actuate.endpoint.SystemPublicMetrics;
-import org.springframework.boot.actuate.endpoint.TomcatPublicMetrics;
+import org.springframework.boot.actuate.autoconfigure.web.servlet.MockServletWebServerFactory;
+import org.springframework.boot.actuate.cache.CachePublicMetrics;
+import org.springframework.boot.actuate.metrics.DataSourcePublicMetrics;
import org.springframework.boot.actuate.metrics.Metric;
+import org.springframework.boot.actuate.metrics.PublicMetrics;
+import org.springframework.boot.actuate.metrics.SystemPublicMetrics;
+import org.springframework.boot.actuate.metrics.TomcatPublicMetrics;
+import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics;
import org.springframework.boot.actuate.metrics.rich.RichGauge;
import org.springframework.boot.actuate.metrics.rich.RichGaugeReader;
-import org.springframework.boot.actuate.servlet.MockServletWebServerFactory;
+import org.springframework.boot.actuate.metrics.rich.RichGaugeReaderPublicMetrics;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvidersConfiguration;
+import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
import org.springframework.cache.CacheManager;
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..c97b82077e
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/mongo/MongoHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.mongo;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.mongo.MongoHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link MongoHealthIndicatorAutoConfiguration}
+ *
+ * @author Phillip Webb
+ */
+public class MongoHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class,
+ MongoDataAutoConfiguration.class,
+ MongoHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(MongoHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.mongo.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(MongoHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..4d0650d970
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.neo4j;
+
+import org.junit.Test;
+import org.neo4j.ogm.session.SessionFactory;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.neo4j.Neo4jHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link Neo4jHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillp Webb
+ */
+public class Neo4jHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class,
+ Neo4jHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(Neo4jHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.neo4j.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(Neo4jHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @AutoConfigureBefore(Neo4jHealthIndicatorAutoConfiguration.class)
+ protected static class Neo4jConfiguration {
+
+ @Bean
+ public SessionFactory sessionFactory() {
+ return mock(SessionFactory.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..d617f54891
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.redis;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.redis.RedisHealthIndicator;
+import org.springframework.boot.actuate.redis.RedisReactiveHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.boot.testsupport.runner.classpath.ClassPathExclusions;
+import org.springframework.boot.testsupport.runner.classpath.ModifiedClassPathRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link RedisHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+@RunWith(ModifiedClassPathRunner.class)
+@ClassPathExclusions({ "reactor-core*.jar", "lettuce-core*.jar" })
+public class RedisHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class,
+ RedisHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(RedisHealthIndicator.class)
+ .doesNotHaveBean(RedisReactiveHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.redis.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(RedisHealthIndicator.class)
+ .doesNotHaveBean(RedisReactiveHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java
new file mode 100644
index 0000000000..c307e24d3d
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/redis/RedisReactiveHealthIndicatorConfigurationTests.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.redis;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.redis.RedisHealthIndicator;
+import org.springframework.boot.actuate.redis.RedisReactiveHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link RedisReactiveHealthIndicatorConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class RedisReactiveHealthIndicatorConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class,
+ RedisHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(RedisReactiveHealthIndicatorConfiguration.class)
+ .doesNotHaveBean(RedisHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.redis.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(RedisReactiveHealthIndicator.class)
+ .doesNotHaveBean(RedisHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..8d98475e8c
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/solr/SolrHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.solr;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.solr.SolrHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link SolrHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class SolrHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(SolrAutoConfiguration.class,
+ SolrHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run(
+ (context) -> assertThat(context).hasSingleBean(SolrHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.solr.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(SolrHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 0000000000..88554efc05
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/system/DiskSpaceHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.system;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.system.DiskSpaceHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link DiskSpaceHealthIndicatorAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class DiskSpaceHealthIndicatorAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(DiskSpaceHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(DiskSpaceHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner.withPropertyValues("management.health.diskspace.enabled:false")
+ .run((context) -> assertThat(context)
+ .doesNotHaveBean(DiskSpaceHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+}
diff --git a/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java
new file mode 100644
index 0000000000..92016058f9
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceEndpointAutoConfigurationTests.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.trace;
+
+import org.junit.Test;
+
+import org.springframework.boot.actuate.trace.TraceEndpoint;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link TraceEndpointAutoConfiguration}.
+ *
+ * @author Phillip Webb
+ */
+public class TraceEndpointAutoConfigurationTests {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(
+ AutoConfigurations.of(TraceEndpointAutoConfiguration.class));
+
+ @Test
+ public void runShouldHaveEndpointBean() {
+ this.contextRunner
+ .run((context) -> assertThat(context).hasSingleBean(TraceEndpoint.class));
+ }
+
+ @Test
+ public void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean()
+ throws Exception {
+ this.contextRunner.withPropertyValues("endpoints.trace.enabled:false").run(
+ (context) -> assertThat(context).doesNotHaveBean(TraceEndpoint.class));
+ }
+
+}
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceRepositoryAutoConfigurationTests.java
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java
similarity index 100%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/trace/TraceWebFilterAutoConfigurationTests.java
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelectorTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java
similarity index 93%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelectorTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java
index 692518df5b..25a8f90da5 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/ManagementContextConfigurationImportSelectorTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import java.util.List;
import java.util.stream.Collectors;
@@ -22,6 +22,8 @@ import java.util.stream.Stream;
import org.junit.Test;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
+import org.springframework.boot.actuate.autoconfigure.web.ManagementContextType;
import org.springframework.core.annotation.Order;
import org.springframework.core.type.StandardAnnotationMetadata;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerPropertiesTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java
similarity index 97%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerPropertiesTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java
index 88f326cecb..a38a3f2ed1 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/web/ManagementServerPropertiesTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.autoconfigure.web;
+package org.springframework.boot.actuate.autoconfigure.web.server;
import org.junit.After;
import org.junit.Test;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/servlet/MockServletWebServerFactory.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/MockServletWebServerFactory.java
similarity index 97%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/servlet/MockServletWebServerFactory.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/MockServletWebServerFactory.java
index f1c30b728c..6eb8056358 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/servlet/MockServletWebServerFactory.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/MockServletWebServerFactory.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.servlet;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
import java.util.Arrays;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpointTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointTests.java
similarity index 89%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpointTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointTests.java
index f38479eaef..79894b1166 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/RequestMappingEndpointTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/servlet/RequestMappingEndpointTests.java
@@ -14,20 +14,20 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint;
+package org.springframework.boot.actuate.autoconfigure.web.servlet;
import java.util.Collections;
import java.util.Map;
import org.junit.Test;
-import org.springframework.boot.endpoint.EndpointInfo;
-import org.springframework.boot.endpoint.OperationType;
+import org.springframework.boot.actuate.endpoint.EndpointInfo;
+import org.springframework.boot.actuate.endpoint.OperationType;
+import org.springframework.boot.actuate.endpoint.web.OperationRequestPredicate;
+import org.springframework.boot.actuate.endpoint.web.WebEndpointHttpMethod;
+import org.springframework.boot.actuate.endpoint.web.WebEndpointOperation;
+import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.boot.endpoint.web.EndpointMapping;
-import org.springframework.boot.endpoint.web.OperationRequestPredicate;
-import org.springframework.boot.endpoint.web.WebEndpointHttpMethod;
-import org.springframework.boot.endpoint.web.WebEndpointOperation;
-import org.springframework.boot.endpoint.web.mvc.WebEndpointServletHandlerMapping;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -116,7 +116,7 @@ public class RequestMappingEndpointTests {
@SuppressWarnings("unchecked")
@Test
public void concreteMethodMappings() {
- WebEndpointServletHandlerMapping mapping = createHandlerMapping();
+ WebMvcEndpointHandlerMapping mapping = createHandlerMapping();
this.endpoint.setMethodMappings(
Collections.>singletonList(mapping));
Map result = this.endpoint.mappings();
@@ -132,13 +132,13 @@ public class RequestMappingEndpointTests {
.containsOnlyKeys("method"));
}
- private WebEndpointServletHandlerMapping createHandlerMapping() {
+ private WebMvcEndpointHandlerMapping createHandlerMapping() {
OperationRequestPredicate requestPredicate = new OperationRequestPredicate("test",
WebEndpointHttpMethod.GET, Collections.singletonList("application/json"),
Collections.singletonList("application/json"));
WebEndpointOperation operation = new WebEndpointOperation(OperationType.READ,
(arguments) -> "Invoked", true, requestPredicate, "test");
- WebEndpointServletHandlerMapping mapping = new WebEndpointServletHandlerMapping(
+ WebMvcEndpointHandlerMapping mapping = new WebMvcEndpointHandlerMapping(
new EndpointMapping("application"),
Collections.singleton(new EndpointInfo<>("test", true,
Collections.singleton(operation))));
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java
similarity index 96%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java
index 0d03bf6d81..3b0400796e 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderNoJmxTests.java
@@ -22,7 +22,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.actuate.autoconfigure.metrics.PublicMetricsAutoConfiguration;
-import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics;
+import org.springframework.boot.actuate.metrics.reader.MetricReaderPublicMetrics;
import org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java
similarity index 97%
rename from spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java
rename to spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java
index f8a01b0903..46e443dfdd 100644
--- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java
+++ b/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/metrics/integration/SpringIntegrationMetricReaderTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2016 the original author or authors.
+ * Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/actuator-docs-index.html b/spring-boot-actuator-autoconfigure/src/test/resources/actuator-docs-index.html
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml
new file mode 100644
index 0000000000..cdee1d0503
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-ehcache.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml
new file mode 100644
index 0000000000..fe46b433f3
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-hazelcast.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml
new file mode 100644
index 0000000000..741fb6292b
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/cache/test-infinispan.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml b/spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml
new file mode 100644
index 0000000000..134b17b543
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/db/changelog/db.changelog-master.yaml
@@ -0,0 +1,20 @@
+databaseChangeLog:
+ - changeSet:
+ id: 1
+ author: marceloverdijk
+ changes:
+ - createTable:
+ tableName: customer
+ columns:
+ - column:
+ name: id
+ type: int
+ autoIncrement: true
+ constraints:
+ primaryKey: true
+ nullable: false
+ - column:
+ name: name
+ type: varchar(50)
+ constraints:
+ nullable: false
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql b/spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql
new file mode 100644
index 0000000000..469b79ad89
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/db/create-custom-schema.sql
@@ -0,0 +1 @@
+CREATE SCHEMA CUSTOMSCHEMA;
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/db/migration/V1__init.sql b/spring-boot-actuator-autoconfigure/src/test/resources/db/migration/V1__init.sql
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/git.properties b/spring-boot-actuator-autoconfigure/src/test/resources/git.properties
new file mode 100644
index 0000000000..d88056068a
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/git.properties
@@ -0,0 +1,13 @@
+#Generated by Git-Commit-Id-Plugin
+#Thu May 23 09:26:42 BST 2013
+git.commit.id.abbrev=e02a4f3
+git.commit.user.email=dsyer@vmware.com
+git.commit.message.full=Update Spring
+git.commit.id=e02a4f3b6f452cdbf6dd311f1362679eb4c31ced
+git.commit.message.short=Update Spring
+git.commit.user.name=Dave Syer
+git.build.user.name=Dave Syer
+git.build.user.email=dsyer@vmware.com
+git.branch=develop
+git.commit.time=2013-04-24T08\:42\:13+0100
+git.build.time=2013-05-23T09\:26\:42+0100
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml b/spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml
new file mode 100644
index 0000000000..b45ed52520
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/hazelcast.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml b/spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000000..8c0f7f4652
--- /dev/null
+++ b/spring-boot-actuator-autoconfigure/src/test/resources/log4j2-test.xml
@@ -0,0 +1,17 @@
+
+
+
+ %xwEx
+ %5p
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-boot-actuator-autoconfigure/src/test/resources/test.jks b/spring-boot-actuator-autoconfigure/src/test/resources/test.jks
new file mode 100644
index 0000000000..cc0d7081c2
Binary files /dev/null and b/spring-boot-actuator-autoconfigure/src/test/resources/test.jks differ
diff --git a/spring-boot-actuator/pom.xml b/spring-boot-actuator/pom.xml
index ad91aba541..30fd37cc3d 100644
--- a/spring-boot-actuator/pom.xml
+++ b/spring-boot-actuator/pom.xml
@@ -25,26 +25,10 @@
org.springframework.boot
spring-boot
-
- org.springframework.boot
- spring-boot-autoconfigure
-
+
com.fasterxml.jackson.core
jackson-databind
-
-
- org.springframework
- spring-core
-
-
- org.springframework
- spring-context
-
-
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-xml
true
@@ -72,16 +56,6 @@
java-statsd-client
true
-
- com.zaxxer
- HikariCP
- true
-
-
- io.dropwizard.metrics
- metrics-core
- true
-
io.lettuce
lettuce-core
@@ -92,57 +66,21 @@
jest
true
-
- javax.cache
- cache-api
- true
-
javax.jms
javax.jms-api
true
-
- javax.servlet
- javax.servlet-api
- true
-
net.sf.ehcache
ehcache
true
-
- org.apache.activemq
- activemq-broker
- true
-
-
- geronimo-jms_1.1_spec
- org.apache.geronimo.specs
-
-
-
-
- org.apache.commons
- commons-dbcp2
- true
-
org.apache.tomcat.embed
tomcat-embed-core
true
-
- org.apache.tomcat.embed
- tomcat-embed-el
- true
-
-
- org.apache.tomcat
- tomcat-jdbc
- true
-
org.elasticsearch
elasticsearch
@@ -168,11 +106,6 @@
hibernate-validator
true
-
- org.jolokia
- jolokia-core
- true
-
org.infinispan
infinispan-spring4-embedded
@@ -198,6 +131,11 @@
spring-webflux
true
+
+ org.springframework
+ spring-web
+ true
+
org.springframework
spring-webmvc
@@ -258,7 +196,7 @@
org.springframework.security
- spring-security-config
+ spring-security-core
true
@@ -267,11 +205,6 @@
true
-
- org.springframework.boot
- spring-boot-autoconfigure-processor
- true
-
org.springframework.boot
spring-boot-configuration-processor
@@ -289,8 +222,28 @@
test
- ch.qos.logback
- logback-classic
+ org.springframework.boot
+ spring-boot-autoconfigure
+ test
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ test
+
+
+ org.apache.logging.log4j
+ log4j-api
+ test
+
+
+ org.apache.logging.log4j
+ log4j-core
+ test
+
+
+ org.glassfish.jersey.media
+ jersey-media-json-jackson
test
@@ -299,13 +252,13 @@
test
- io.projectreactor.ipc
- reactor-netty
+ io.projectreactor
+ reactor-test
test
- io.projectreactor
- reactor-test
+ io.projectreactor.ipc
+ reactor-netty
test
@@ -324,21 +277,11 @@
-
- org.aspectj
- aspectjrt
- test
-
org.hsqldb
hsqldb
test
-
- org.glassfish.jersey.media
- jersey-media-json-jackson
- test
-
org.glassfish.jersey.ext
jersey-spring4
@@ -349,35 +292,5 @@
jsonassert
test
-
- org.springframework.data
- spring-data-elasticsearch
- test
-
-
- org.springframework.data
- spring-data-rest-webmvc
- test
-
-
- org.springframework.integration
- spring-integration-jmx
- test
-
-
- org.springframework.security
- spring-security-test
- test
-
-
- org.yaml
- snakeyaml
- test
-
-
- redis.clients
- jedis
- true
-
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java
similarity index 86%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java
rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java
index 93e4fffbd8..9deb3f2c14 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/RabbitHealthIndicator.java
+++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/amqp/RabbitHealthIndicator.java
@@ -14,9 +14,12 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.health;
+package org.springframework.boot.actuate.amqp;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.boot.actuate.health.AbstractHealthIndicator;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.util.Assert;
/**
@@ -31,7 +34,7 @@ public class RabbitHealthIndicator extends AbstractHealthIndicator {
private final RabbitTemplate rabbitTemplate;
public RabbitHealthIndicator(RabbitTemplate rabbitTemplate) {
- Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null.");
+ Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null");
this.rabbitTemplate = rabbitTemplate;
}
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java
similarity index 86%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpoint.java
rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java
index e896aeeaee..ba9eaafa0e 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/AuditEventsEndpoint.java
+++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java
@@ -14,15 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint;
+package org.springframework.boot.actuate.audit;
import java.util.Date;
import java.util.List;
-import org.springframework.boot.actuate.audit.AuditEvent;
-import org.springframework.boot.actuate.audit.AuditEventRepository;
-import org.springframework.boot.endpoint.Endpoint;
-import org.springframework.boot.endpoint.ReadOperation;
+import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
+import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.util.Assert;
/**
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtension.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtension.java
similarity index 80%
rename from spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtension.java
rename to spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtension.java
index 2fa41c67a6..d6db27d368 100644
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/AuditEventsJmxEndpointExtension.java
+++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsJmxEndpointExtension.java
@@ -14,14 +14,13 @@
* limitations under the License.
*/
-package org.springframework.boot.actuate.endpoint.jmx;
+package org.springframework.boot.actuate.audit;
import java.util.Date;
-import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint;
-import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint.AuditEventsDescriptor;
-import org.springframework.boot.endpoint.ReadOperation;
-import org.springframework.boot.endpoint.jmx.JmxEndpointExtension;
+import org.springframework.boot.actuate.audit.AuditEventsEndpoint.AuditEventsDescriptor;
+import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
+import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointExtension;
/**
* JMX-specific extension of the {@link AuditEventsEndpoint}.
diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java
deleted file mode 100644
index 40b3a0f3fc..0000000000
--- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright 2012-2017 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.boot.actuate.autoconfigure.endpoint;
-
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Supplier;
-
-import liquibase.integration.spring.SpringLiquibase;
-import org.flywaydb.core.Flyway;
-
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.boot.actuate.audit.AuditEventRepository;
-import org.springframework.boot.actuate.endpoint.AuditEventsEndpoint;
-import org.springframework.boot.actuate.endpoint.AutoConfigurationReportEndpoint;
-import org.springframework.boot.actuate.endpoint.BeansEndpoint;
-import org.springframework.boot.actuate.endpoint.ConfigurationPropertiesReportEndpoint;
-import org.springframework.boot.actuate.endpoint.EnvironmentEndpoint;
-import org.springframework.boot.actuate.endpoint.FlywayEndpoint;
-import org.springframework.boot.actuate.endpoint.HealthEndpoint;
-import org.springframework.boot.actuate.endpoint.InfoEndpoint;
-import org.springframework.boot.actuate.endpoint.LiquibaseEndpoint;
-import org.springframework.boot.actuate.endpoint.LoggersEndpoint;
-import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
-import org.springframework.boot.actuate.endpoint.PublicMetrics;
-import org.springframework.boot.actuate.endpoint.RequestMappingEndpoint;
-import org.springframework.boot.actuate.endpoint.ShutdownEndpoint;
-import org.springframework.boot.actuate.endpoint.StatusEndpoint;
-import org.springframework.boot.actuate.endpoint.ThreadDumpEndpoint;
-import org.springframework.boot.actuate.endpoint.TraceEndpoint;
-import org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory;
-import org.springframework.boot.actuate.health.HealthAggregator;
-import org.springframework.boot.actuate.health.HealthIndicator;
-import org.springframework.boot.actuate.health.OrderedHealthAggregator;
-import org.springframework.boot.actuate.health.ReactiveHealthIndicator;
-import org.springframework.boot.actuate.info.InfoContributor;
-import org.springframework.boot.actuate.trace.InMemoryTraceRepository;
-import org.springframework.boot.actuate.trace.TraceRepository;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
-import org.springframework.boot.autoconfigure.condition.SearchStrategy;
-import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration;
-import org.springframework.boot.endpoint.Endpoint;
-import org.springframework.boot.logging.LoggingSystem;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.core.annotation.AnnotationAwareOrderComparator;
-import org.springframework.core.env.Environment;
-import org.springframework.util.ObjectUtils;
-import org.springframework.web.servlet.handler.AbstractHandlerMethodMapping;
-
-/**
- * {@link EnableAutoConfiguration Auto-configuration} for common management
- * {@link Endpoint}s.
- *
- * @author Dave Syer
- * @author Phillip Webb
- * @author Greg Turnquist
- * @author Christian Dupuis
- * @author Stephane Nicoll
- * @author EddĂș MelĂ©ndez
- * @author Meang Akira Tanaka
- * @author Ben Hale
- * @author Andy Wilkinson
- * @since 2.0.0
- */
-@Configuration
-@AutoConfigureAfter({ FlywayAutoConfiguration.class, LiquibaseAutoConfiguration.class })
-public class EndpointAutoConfiguration {
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public EnvironmentEndpoint environmentEndpoint(Environment environment) {
- return new EnvironmentEndpoint(environment);
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public BeansEndpoint beansEndpoint(
- ConfigurableApplicationContext applicationContext) {
- return new BeansEndpoint(applicationContext);
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public InfoEndpoint infoEndpoint(
- ObjectProvider> infoContributors) {
- return new InfoEndpoint(infoContributors.getIfAvailable(Collections::emptyList));
- }
-
- @Bean
- @ConditionalOnBean(LoggingSystem.class)
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public LoggersEndpoint loggersEndpoint(LoggingSystem loggingSystem) {
- return new LoggersEndpoint(loggingSystem);
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public MetricsEndpoint metricsEndpoint(
- ObjectProvider> publicMetrics) {
- List sortedPublicMetrics = publicMetrics
- .getIfAvailable(Collections::emptyList);
- Collections.sort(sortedPublicMetrics, AnnotationAwareOrderComparator.INSTANCE);
- return new MetricsEndpoint(sortedPublicMetrics);
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public TraceEndpoint traceEndpoint(ObjectProvider traceRepository) {
- return new TraceEndpoint(
- traceRepository.getIfAvailable(() -> new InMemoryTraceRepository()));
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public ThreadDumpEndpoint dumpEndpoint() {
- return new ThreadDumpEndpoint();
- }
-
- @Bean
- @ConditionalOnBean(ConditionEvaluationReport.class)
- @ConditionalOnMissingBean(search = SearchStrategy.CURRENT)
- @ConditionalOnEnabledEndpoint
- public AutoConfigurationReportEndpoint autoConfigurationReportEndpoint(
- ConditionEvaluationReport conditionEvaluationReport) {
- return new AutoConfigurationReportEndpoint(conditionEvaluationReport);
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public ShutdownEndpoint shutdownEndpoint() {
- return new ShutdownEndpoint();
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnEnabledEndpoint
- public ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoint() {
- return new ConfigurationPropertiesReportEndpoint();
- }
-
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnBean(AuditEventRepository.class)
- @ConditionalOnEnabledEndpoint
- public AuditEventsEndpoint auditEventsEndpoint(
- AuditEventRepository auditEventRepository) {
- return new AuditEventsEndpoint(auditEventRepository);
- }
-
- @Configuration
- @Import(HealthIndicatorsSupplierConfiguration.class)
- static class HealthEndpointConfiguration {
-
- private final HealthIndicator healthIndicator;
-
- HealthEndpointConfiguration(ObjectProvider healthAggregator,
- Supplier