diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java index 15b0ba8d5e..b0b72b6612 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/audit/AuditEventsEndpointAutoConfiguration.java @@ -18,8 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.audit; import org.springframework.boot.actuate.audit.AuditEventRepository; import org.springframework.boot.actuate.audit.AuditEventsEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -37,8 +36,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @AutoConfigureAfter(AuditAutoConfiguration.class) -@ConditionalOnEnabledEndpoint(endpoint = AuditEventsEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = AuditEventsEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = AuditEventsEndpoint.class) public class AuditEventsEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java index 9e8fc5919e..a398570b82 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/beans/BeansEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.beans; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.beans.BeansEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -32,8 +31,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = BeansEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = BeansEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = BeansEndpoint.class) public class BeansEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java index 5ddaf23dd6..f8118eaee7 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java @@ -18,8 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.cache; import java.util.Map; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.cache.CachesEndpoint; import org.springframework.boot.actuate.cache.CachesEndpointWebExtension; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -41,8 +40,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass(CacheManager.class) -@ConditionalOnEnabledEndpoint(endpoint = CachesEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = CachesEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = CachesEndpoint.class) @AutoConfigureAfter(CacheAutoConfiguration.class) public class CachesEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfiguration.java index d253d6029d..2d931b117d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfiguration.java @@ -28,8 +28,7 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryWebEndpointDiscoverer; import org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet.CloudFoundryInfoEndpointWebExtension; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration; import org.springframework.boot.actuate.endpoint.ExposableEndpoint; @@ -86,8 +85,7 @@ public class ReactiveCloudFoundryActuatorAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint @ConditionalOnBean({ HealthEndpoint.class, ReactiveHealthEndpointWebExtension.class }) public CloudFoundryReactiveHealthEndpointWebExtension cloudFoundryReactiveHealthEndpointWebExtension( ReactiveHealthEndpointWebExtension reactiveHealthEndpointWebExtension) { @@ -97,8 +95,7 @@ public class ReactiveCloudFoundryActuatorAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint @ConditionalOnBean({ InfoEndpoint.class, GitProperties.class }) public CloudFoundryInfoEndpointWebExtension cloudFoundryInfoEndpointWebExtension( GitProperties properties, ObjectProvider infoContributors) { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryActuatorAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryActuatorAutoConfiguration.java index 92a64c7ed6..9d65fbf131 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryActuatorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/servlet/CloudFoundryActuatorAutoConfiguration.java @@ -25,8 +25,7 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryWebEndpointDiscoverer; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration; @@ -88,8 +87,7 @@ public class CloudFoundryActuatorAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint @ConditionalOnBean({ HealthEndpoint.class, HealthEndpointWebExtension.class }) public CloudFoundryHealthEndpointWebExtension cloudFoundryHealthEndpointWebExtension( HealthEndpointWebExtension healthEndpointWebExtension) { @@ -98,8 +96,7 @@ public class CloudFoundryActuatorAutoConfiguration { @Bean @ConditionalOnMissingBean - @ConditionalOnEnabledEndpoint - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint @ConditionalOnBean({ InfoEndpoint.class, GitProperties.class }) public CloudFoundryInfoEndpointWebExtension cloudFoundryInfoEndpointWebExtension( GitProperties properties, ObjectProvider infoContributors) { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointAutoConfiguration.java index d96b3e45b0..c0151d263d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.condition; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.SearchStrategy; @@ -33,8 +32,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = ConditionsReportEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = ConditionsReportEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = ConditionsReportEndpoint.class) public class ConditionsReportEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java index f2d1f50f90..3510b03267 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/ShutdownEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.context; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.context.ShutdownEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -31,8 +30,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = ShutdownEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = ShutdownEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = ShutdownEndpoint.class) public class ShutdownEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java index 6fd20c1673..d9fe6c792f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.context.properties; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -34,8 +33,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = ConfigurationPropertiesReportEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = ConfigurationPropertiesReportEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = ConfigurationPropertiesReportEndpoint.class) @EnableConfigurationProperties(ConfigurationPropertiesReportEndpointProperties.class) public class ConfigurationPropertiesReportEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java index 528a9afecd..432b81c41c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java @@ -16,10 +16,15 @@ package org.springframework.boot.actuate.autoconfigure.endpoint.condition; +import java.lang.annotation.Annotation; import java.util.Map; +import java.util.Optional; +import org.springframework.boot.actuate.endpoint.EndpointId; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; +import org.springframework.boot.autoconfigure.condition.ConditionMessage; +import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ConditionContext; @@ -27,10 +32,12 @@ import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.MergedAnnotation; import org.springframework.core.annotation.MergedAnnotations; import org.springframework.core.annotation.MergedAnnotations.SearchStrategy; +import org.springframework.core.env.Environment; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.core.type.MethodMetadata; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; +import org.springframework.util.ConcurrentReferenceHashMap; /** * Base class for {@link Endpoint @Endpoint} related {@link SpringBootCondition} @@ -42,12 +49,44 @@ import org.springframework.util.ClassUtils; */ abstract class AbstractEndpointCondition extends SpringBootCondition { + private static final String ENABLED_BY_DEFAULT_KEY = "management.endpoints.enabled-by-default"; + + private static final ConcurrentReferenceHashMap> enabledByDefaultCache = new ConcurrentReferenceHashMap<>(); + AnnotationAttributes getEndpointAttributes(Class annotationClass, ConditionContext context, AnnotatedTypeMetadata metadata) { return getEndpointAttributes(getEndpointType(annotationClass, context, metadata)); } - Class getEndpointType(Class annotationClass, ConditionContext context, + protected ConditionOutcome getEnablementOutcome(ConditionContext context, + AnnotatedTypeMetadata metadata, Class annotationClass) { + Environment environment = context.getEnvironment(); + AnnotationAttributes attributes = getEndpointAttributes(annotationClass, context, + metadata); + EndpointId id = EndpointId.of(attributes.getString("id")); + String key = "management.endpoint." + id.toLowerCaseString() + ".enabled"; + Boolean userDefinedEnabled = environment.getProperty(key, Boolean.class); + if (userDefinedEnabled != null) { + return new ConditionOutcome(userDefinedEnabled, + ConditionMessage.forCondition(annotationClass) + .because("found property " + key + " with value " + + userDefinedEnabled)); + } + Boolean userDefinedDefault = isEnabledByDefault(environment); + if (userDefinedDefault != null) { + return new ConditionOutcome(userDefinedDefault, + ConditionMessage.forCondition(annotationClass) + .because("no property " + key + + " found so using user defined default from " + + ENABLED_BY_DEFAULT_KEY)); + } + boolean endpointDefault = attributes.getBoolean("enableByDefault"); + return new ConditionOutcome(endpointDefault, + ConditionMessage.forCondition(annotationClass).because( + "no property " + key + " found so using endpoint default")); + } + + protected Class getEndpointType(Class annotationClass, ConditionContext context, AnnotatedTypeMetadata metadata) { Map attributes = metadata .getAnnotationAttributes(annotationClass.getName()); @@ -73,7 +112,7 @@ abstract class AbstractEndpointCondition extends SpringBootCondition { } } - AnnotationAttributes getEndpointAttributes(Class type) { + protected AnnotationAttributes getEndpointAttributes(Class type) { MergedAnnotations annotations = MergedAnnotations.from(type, SearchStrategy.EXHAUSTIVE); MergedAnnotation endpoint = annotations.get(Endpoint.class); @@ -88,4 +127,14 @@ abstract class AbstractEndpointCondition extends SpringBootCondition { return getEndpointAttributes(extension.getClass("endpoint")); } + private Boolean isEnabledByDefault(Environment environment) { + Optional enabledByDefault = enabledByDefaultCache.get(environment); + if (enabledByDefault == null) { + enabledByDefault = Optional.ofNullable( + environment.getProperty(ENABLED_BY_DEFAULT_KEY, Boolean.class)); + enabledByDefaultCache.put(environment, enabledByDefault); + } + return enabledByDefault.orElse(null); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnExposedEndpoint.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnAvailableEndpoint.java similarity index 72% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnExposedEndpoint.java rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnAvailableEndpoint.java index 1c481bdd45..61d8b93d5b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnExposedEndpoint.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnAvailableEndpoint.java @@ -28,20 +28,17 @@ import org.springframework.context.annotation.Conditional; import org.springframework.core.env.Environment; /** - * {@link Conditional @Conditional} that checks whether an endpoint is exposed or not. - * Matches according to the endpoint exposure configuration {@link Environment} - * properties. This is designed as a companion annotation to - * {@link ConditionalOnEnabledEndpoint @ConditionalOnEnabledEndpoint}. + * {@link Conditional @Conditional} that checks whether an endpoint is available. An + * endpoint is considered available if it is both enabled and exposed. Matches enablement + * according to the endpoints specific {@link Environment} property, falling back to + * {@code management.endpoints.enabled-by-default} or failing that + * {@link Endpoint#enableByDefault()}. Matches exposure according to any of the + * {@code management.endpoints.web.exposure.} or + * {@code management.endpoints.jmx.exposure.} specific properties or failing that to + * whether the application runs on + * {@link org.springframework.boot.cloud.CloudPlatform#CLOUD_FOUNDRY}. Both those + * conditions should match for the endpoint to be considered available. *

- * For a given {@link Endpoint @Endpoint}, the condition will match if: - *

    - *
  • {@code "management.endpoints.web.exposure.*"} expose this endpoint
  • - *
  • or if JMX is enabled and {@code "management.endpoints.jmx.exposure.*"} expose this - * endpoint
  • - *
  • or if the application is running on - * {@link org.springframework.boot.cloud.CloudPlatform#CLOUD_FOUNDRY}
  • - *
- * * When placed on a {@code @Bean} method, the endpoint defaults to the return type of the * factory method: * @@ -49,7 +46,7 @@ import org.springframework.core.env.Environment; * @Configuration * public class MyConfiguration { * - * @ConditionalOnExposedEndpoint + * @ConditionalOnAvailableEndpoint * @Bean * public MyEndpoint myEndpoint() { * ... @@ -63,7 +60,7 @@ import org.springframework.core.env.Environment; * @Configuration * public class MyConfiguration { * - * @ConditionalOnExposedEndpoint + * @ConditionalOnAvailableEndpoint * @Bean * public MyEndpointWebExtension myEndpointWebExtension() { * ... @@ -72,8 +69,8 @@ import org.springframework.core.env.Environment; * } *

* In the sample above, {@code MyEndpointWebExtension} will be created if the endpoint is - * enabled as defined by the rules above. {@code MyEndpointWebExtension} must be a regular - * extension that refers to an endpoint, something like: + * available as defined by the rules above. {@code MyEndpointWebExtension} must be a + * regular extension that refers to an endpoint, something like: * *

  * @EndpointWebExtension(endpoint = MyEndpoint.class)
@@ -82,13 +79,13 @@ import org.springframework.core.env.Environment;
  * }
*

* Alternatively, the target endpoint can be manually specified for components that should - * only be created when a given endpoint is enabled: + * only be created when a given endpoint is available: * *

  * @Configuration
  * public class MyConfiguration {
  *
- *     @ConditionalOnExposedEndpoint(endpoint = MyEndpoint.class)
+ *     @ConditionalOnAvailableEndpoint(endpoint = MyEndpoint.class)
  *     @Bean
  *     public MyComponent myComponent() {
  *         ...
@@ -97,15 +94,15 @@ import org.springframework.core.env.Environment;
  * }
* * @author Brian Clozel + * @author Stephane Nicoll * @since 2.2.0 * @see Endpoint - * @see ConditionalOnEnabledEndpoint */ @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE }) @Documented -@Conditional(OnExposedEndpointCondition.class) -public @interface ConditionalOnExposedEndpoint { +@Conditional(OnAvailableEndpointCondition.class) +public @interface ConditionalOnAvailableEndpoint { /** * The endpoint type that should be checked. Inferred when the return type of the diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java index e833d40df1..21488df2ae 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpoint.java @@ -90,11 +90,13 @@ import org.springframework.core.env.Environment; * @author Stephane Nicoll * @since 2.0.0 * @see Endpoint + * @deprecated as of 2.2.0 in favor of {@link ConditionalOnAvailableEndpoint} */ @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD, ElementType.TYPE }) @Documented @Conditional(OnEnabledEndpointCondition.class) +@Deprecated public @interface ConditionalOnEnabledEndpoint { /** diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnExposedEndpointCondition.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnAvailableEndpointCondition.java similarity index 86% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnExposedEndpointCondition.java rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnAvailableEndpointCondition.java index a2152548ba..cc5fadf7c4 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnExposedEndpointCondition.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnAvailableEndpointCondition.java @@ -35,12 +35,13 @@ import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.util.ConcurrentReferenceHashMap; /** - * A condition that checks if an endpoint is exposed. + * A condition that checks if an endpoint is available (i.e. enabled and exposed). * * @author Brian Clozel - * @see ConditionalOnExposedEndpoint + * @author Stephane Nicoll + * @see ConditionalOnAvailableEndpoint */ -class OnExposedEndpointCondition extends AbstractEndpointCondition { +class OnAvailableEndpointCondition extends AbstractEndpointCondition { private static final String JMX_ENABLED_KEY = "spring.jmx.enabled"; @@ -49,28 +50,34 @@ class OnExposedEndpointCondition extends AbstractEndpointCondition { @Override public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { + ConditionOutcome enablementOutcome = getEnablementOutcome(context, metadata, + ConditionalOnAvailableEndpoint.class); + if (!enablementOutcome.isMatch()) { + return enablementOutcome; + } + ConditionMessage message = enablementOutcome.getConditionMessage(); Environment environment = context.getEnvironment(); if (CloudPlatform.CLOUD_FOUNDRY.isActive(environment)) { return new ConditionOutcome(true, - ConditionMessage.forCondition(ConditionalOnExposedEndpoint.class) + message.andCondition(ConditionalOnAvailableEndpoint.class) .because("application is running on Cloud Foundry")); } AnnotationAttributes attributes = getEndpointAttributes( - ConditionalOnExposedEndpoint.class, context, metadata); + ConditionalOnAvailableEndpoint.class, context, metadata); EndpointId id = EndpointId.of(attributes.getString("id")); Set exposureInformations = getExposureInformation( environment); for (ExposureInformation exposureInformation : exposureInformations) { if (exposureInformation.isExposed(id)) { return new ConditionOutcome(true, - ConditionMessage.forCondition(ConditionalOnExposedEndpoint.class) + message.andCondition(ConditionalOnAvailableEndpoint.class) .because("marked as exposed by a 'management.endpoints." + exposureInformation.getPrefix() + ".exposure' property")); } } return new ConditionOutcome(false, - ConditionMessage.forCondition(ConditionalOnExposedEndpoint.class).because( + message.andCondition(ConditionalOnAvailableEndpoint.class).because( "no 'management.endpoints' property marked it as exposed")); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java index f06024789e..b1cb011936 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/OnEnabledEndpointCondition.java @@ -16,16 +16,9 @@ package org.springframework.boot.actuate.autoconfigure.endpoint.condition; -import java.util.Optional; - -import org.springframework.boot.actuate.endpoint.EndpointId; -import org.springframework.boot.autoconfigure.condition.ConditionMessage; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.annotation.AnnotationAttributes; -import org.springframework.core.env.Environment; import org.springframework.core.type.AnnotatedTypeMetadata; -import org.springframework.util.ConcurrentReferenceHashMap; /** * A condition that checks if an endpoint is enabled. @@ -34,50 +27,16 @@ import org.springframework.util.ConcurrentReferenceHashMap; * @author Andy Wilkinson * @author Phillip Webb * @see ConditionalOnEnabledEndpoint + * @deprecated as of 2.2.0 in favor of {@link OnAvailableEndpointCondition} */ +@Deprecated class OnEnabledEndpointCondition extends AbstractEndpointCondition { - private static final String ENABLED_BY_DEFAULT_KEY = "management.endpoints.enabled-by-default"; - - private static final ConcurrentReferenceHashMap> enabledByDefaultCache = new ConcurrentReferenceHashMap<>(); - @Override public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { - Environment environment = context.getEnvironment(); - AnnotationAttributes attributes = getEndpointAttributes( - ConditionalOnEnabledEndpoint.class, context, metadata); - EndpointId id = EndpointId.of(attributes.getString("id")); - String key = "management.endpoint." + id.toLowerCaseString() + ".enabled"; - Boolean userDefinedEnabled = environment.getProperty(key, Boolean.class); - if (userDefinedEnabled != null) { - return new ConditionOutcome(userDefinedEnabled, - ConditionMessage.forCondition(ConditionalOnEnabledEndpoint.class) - .because("found property " + key + " with value " - + userDefinedEnabled)); - } - Boolean userDefinedDefault = isEnabledByDefault(environment); - if (userDefinedDefault != null) { - return new ConditionOutcome(userDefinedDefault, - ConditionMessage.forCondition(ConditionalOnEnabledEndpoint.class) - .because("no property " + key - + " found so using user defined default from " - + ENABLED_BY_DEFAULT_KEY)); - } - boolean endpointDefault = attributes.getBoolean("enableByDefault"); - return new ConditionOutcome(endpointDefault, - ConditionMessage.forCondition(ConditionalOnEnabledEndpoint.class).because( - "no property " + key + " found so using endpoint default")); - } - - private Boolean isEnabledByDefault(Environment environment) { - Optional enabledByDefault = enabledByDefaultCache.get(environment); - if (enabledByDefault == null) { - enabledByDefault = Optional.ofNullable( - environment.getProperty(ENABLED_BY_DEFAULT_KEY, Boolean.class)); - enabledByDefaultCache.put(environment, enabledByDefault); - } - return enabledByDefault.orElse(null); + return getEnablementOutcome(context, metadata, + ConditionalOnEnabledEndpoint.class); } } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java index 3b8a62b03d..fbaa096b3c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.env; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.env.EnvironmentEndpoint; import org.springframework.boot.actuate.env.EnvironmentEndpointWebExtension; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -36,8 +35,7 @@ import org.springframework.core.env.Environment; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = EnvironmentEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = EnvironmentEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = EnvironmentEndpoint.class) @EnableConfigurationProperties(EnvironmentEndpointProperties.class) public class EnvironmentEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java index 677d31cdbc..12fccfc2f8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/flyway/FlywayEndpointAutoConfiguration.java @@ -18,8 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.flyway; import org.flywaydb.core.Flyway; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.flyway.FlywayEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -39,8 +38,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass(Flyway.class) -@ConditionalOnEnabledEndpoint(endpoint = FlywayEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = FlywayEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = FlywayEndpoint.class) @AutoConfigureAfter(FlywayAutoConfiguration.class) public class FlywayEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.java index d898cea11f..14651112ba 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.health; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.health.CompositeHealthIndicator; import org.springframework.boot.actuate.health.HealthAggregator; import org.springframework.boot.actuate.health.HealthEndpoint; @@ -34,8 +33,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @ConditionalOnSingleCandidate(HealthIndicatorRegistry.class) -@ConditionalOnEnabledEndpoint(endpoint = HealthEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = HealthEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = HealthEndpoint.class) class HealthEndpointConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.java index 77c2602c8c..070b340e0b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.java @@ -17,8 +17,7 @@ package org.springframework.boot.actuate.autoconfigure.health; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.health.CompositeReactiveHealthIndicator; import org.springframework.boot.actuate.health.HealthAggregator; import org.springframework.boot.actuate.health.HealthEndpoint; @@ -44,8 +43,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(HealthIndicatorProperties.class) -@ConditionalOnEnabledEndpoint(endpoint = HealthEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = HealthEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = HealthEndpoint.class) class HealthEndpointWebExtensionConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java index 40e0b795b9..ab24e4859c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/info/InfoEndpointAutoConfiguration.java @@ -19,8 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.info; import java.util.stream.Collectors; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.info.InfoContributor; import org.springframework.boot.actuate.info.InfoEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -36,8 +35,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = InfoEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = InfoEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = InfoEndpoint.class) @AutoConfigureAfter(InfoContributorAutoConfiguration.class) public class InfoEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/integration/IntegrationGraphEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/integration/IntegrationGraphEndpointAutoConfiguration.java index eb276b881f..51fa95a434 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/integration/IntegrationGraphEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/integration/IntegrationGraphEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.integration; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.integration.IntegrationGraphEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -41,8 +40,7 @@ import org.springframework.integration.graph.IntegrationGraphServer; @Configuration(proxyBeanMethods = false) @ConditionalOnClass(IntegrationGraphServer.class) @ConditionalOnBean(IntegrationConfigurationBeanFactoryPostProcessor.class) -@ConditionalOnEnabledEndpoint(endpoint = IntegrationGraphEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = IntegrationGraphEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = IntegrationGraphEndpoint.class) @AutoConfigureAfter(IntegrationAutoConfiguration.class) public class IntegrationGraphEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaEndpointAutoConfiguration.java index 57bdf8cfaa..2c7676bd54 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/jolokia/JolokiaEndpointAutoConfiguration.java @@ -18,8 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.jolokia; import org.jolokia.http.AgentServlet; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -37,8 +36,7 @@ import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) @ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnClass(AgentServlet.class) -@ConditionalOnEnabledEndpoint(endpoint = JolokiaEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = JolokiaEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = JolokiaEndpoint.class) @EnableConfigurationProperties(JolokiaProperties.class) public class JolokiaEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java index 19a1034e23..e5fd449294 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/liquibase/LiquibaseEndpointAutoConfiguration.java @@ -20,8 +20,7 @@ import liquibase.integration.spring.SpringLiquibase; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.liquibase.LiquibaseEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -42,8 +41,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass(SpringLiquibase.class) -@ConditionalOnEnabledEndpoint(endpoint = LiquibaseEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = LiquibaseEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = LiquibaseEndpoint.class) @AutoConfigureAfter(LiquibaseAutoConfiguration.class) public class LiquibaseEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointAutoConfiguration.java index 7f2af9ac85..0289553214 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LogFileWebEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.logging; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.logging.LogFileWebEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionMessage; @@ -42,8 +41,7 @@ import org.springframework.util.StringUtils; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = LogFileWebEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = LogFileWebEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = LogFileWebEndpoint.class) @EnableConfigurationProperties(LogFileWebEndpointProperties.class) public class LogFileWebEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java index 4061f2267e..bd0bf70aff 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/logging/LoggersEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.logging; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.logging.LoggersEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionMessage; @@ -39,8 +38,7 @@ import org.springframework.core.type.AnnotatedTypeMetadata; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = LoggersEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = LoggersEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = LoggersEndpoint.class) public class LoggersEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointAutoConfiguration.java index d6bc505c26..ed775c2c7e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/HeapDumpWebEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.management; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.management.HeapDumpWebEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -31,8 +30,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = HeapDumpWebEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = HeapDumpWebEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = HeapDumpWebEndpoint.class) public class HeapDumpWebEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java index 475d6d0f4f..8738a871c4 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/management/ThreadDumpEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.management; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.management.ThreadDumpEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -31,8 +30,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = ThreadDumpEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = ThreadDumpEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = ThreadDumpEndpoint.class) public class ThreadDumpEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java index d24b5edf32..dc7035f71b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsEndpointAutoConfiguration.java @@ -19,8 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics; import io.micrometer.core.annotation.Timed; import io.micrometer.core.instrument.MeterRegistry; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.metrics.MetricsEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -38,8 +37,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass(Timed.class) -@ConditionalOnEnabledEndpoint(endpoint = MetricsEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = MetricsEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = MetricsEndpoint.class) @AutoConfigureAfter({ MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class }) public class MetricsEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java index 567e2eb3c9..2b97e543ca 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java @@ -29,8 +29,7 @@ import io.prometheus.client.exporter.PushGateway; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration; @@ -89,8 +88,7 @@ public class PrometheusMetricsExportAutoConfiguration { } @Configuration(proxyBeanMethods = false) - @ConditionalOnEnabledEndpoint(endpoint = PrometheusScrapeEndpoint.class) - @ConditionalOnExposedEndpoint(endpoint = PrometheusScrapeEndpoint.class) + @ConditionalOnAvailableEndpoint(endpoint = PrometheusScrapeEndpoint.class) public static class PrometheusScrapeEndpointConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/scheduling/ScheduledTasksEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/scheduling/ScheduledTasksEndpointAutoConfiguration.java index 36c5a73288..a370fbcfd1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/scheduling/ScheduledTasksEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/scheduling/ScheduledTasksEndpointAutoConfiguration.java @@ -19,8 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.scheduling; import java.util.stream.Collectors; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -35,8 +34,7 @@ import org.springframework.scheduling.config.ScheduledTaskHolder; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = ScheduledTasksEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = ScheduledTasksEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = ScheduledTasksEndpoint.class) public class ScheduledTasksEndpointAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/session/SessionsEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/session/SessionsEndpointAutoConfiguration.java index 6facabffe7..1e216f2d37 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/session/SessionsEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/session/SessionsEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.session; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.session.SessionsEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -38,8 +37,7 @@ import org.springframework.session.Session; */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass(FindByIndexNameSessionRepository.class) -@ConditionalOnEnabledEndpoint(endpoint = SessionsEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = SessionsEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = SessionsEndpoint.class) @AutoConfigureAfter(SessionAutoConfiguration.class) public class SessionsEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceEndpointAutoConfiguration.java index d7c3c68ffc..b820973b9d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceEndpointAutoConfiguration.java @@ -16,8 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.trace.http; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.trace.http.HttpTraceEndpoint; import org.springframework.boot.actuate.trace.http.HttpTraceRepository; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -34,8 +33,7 @@ import org.springframework.context.annotation.Configuration; * @since 2.0.0 */ @Configuration(proxyBeanMethods = false) -@ConditionalOnEnabledEndpoint(endpoint = HttpTraceEndpoint.class) -@ConditionalOnExposedEndpoint(endpoint = HttpTraceEndpoint.class) +@ConditionalOnAvailableEndpoint(endpoint = HttpTraceEndpoint.class) @AutoConfigureAfter(HttpTraceAutoConfiguration.class) public class HttpTraceEndpointAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration.java index 749f88f56e..57b2434199 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/mappings/MappingsEndpointAutoConfiguration.java @@ -19,8 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.web.mappings; import java.util.stream.Collectors; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint; -import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnExposedEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.web.mappings.MappingDescriptionProvider; import org.springframework.boot.actuate.web.mappings.MappingsEndpoint; import org.springframework.boot.actuate.web.mappings.reactive.DispatcherHandlersMappingDescriptionProvider; @@ -48,8 +47,7 @@ import org.springframework.web.servlet.DispatcherServlet; public class MappingsEndpointAutoConfiguration { @Bean - @ConditionalOnEnabledEndpoint - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public MappingsEndpoint mappingsEndpoint(ApplicationContext applicationContext, ObjectProvider descriptionProviders) { return new MappingsEndpoint( diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnExposedEndpointTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnAvailableEndpointTests.java similarity index 61% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnExposedEndpointTests.java rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnAvailableEndpointTests.java index 7ee9abe306..40068d18e5 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnExposedEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnAvailableEndpointTests.java @@ -29,11 +29,11 @@ import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link ConditionalOnExposedEndpoint @ConditionalOnExposedEndpoint}. + * Tests for {@link ConditionalOnAvailableEndpoint @ConditionalOnAvailableEndpoint}. * * @author Brian Clozel */ -public class ConditionalOnExposedEndpointTests { +public class ConditionalOnAvailableEndpointTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withUserConfiguration(AllEndpointsConfiguration.class); @@ -41,15 +41,45 @@ public class ConditionalOnExposedEndpointTests { @Test public void outcomeShouldMatchDefaults() { this.contextRunner.run((context) -> assertThat(context).hasBean("info") - .hasBean("health").doesNotHaveBean("spring").doesNotHaveBean("test")); + .hasBean("health").doesNotHaveBean("spring").doesNotHaveBean("test") + .doesNotHaveBean("shutdown")); } @Test - public void outcomeWhenIncludeAllWebShouldMatch() { + public void outcomeWithEnabledByDefaultSetToFalseShouldNotMatchAnything() { + this.contextRunner + .withPropertyValues("management.endpoints.enabled-by-default=false") + .run((context) -> assertThat(context).doesNotHaveBean("info") + .doesNotHaveBean("health").doesNotHaveBean("spring") + .doesNotHaveBean("test").doesNotHaveBean("shutdown")); + } + + @Test + public void outcomeWhenIncludeAllWebShouldMatchEnabledEndpoints() { this.contextRunner .withPropertyValues("management.endpoints.web.exposure.include=*") .run((context) -> assertThat(context).hasBean("info").hasBean("health") - .hasBean("test").hasBean("spring")); + .hasBean("test").hasBean("spring").doesNotHaveBean("shutdown")); + } + + @Test + public void outcomeWhenIncludeAllWebAndDisablingEndpointShouldMatchEnabledEndpoints() { + this.contextRunner + .withPropertyValues("management.endpoints.web.exposure.include=*", + "management.endpoint.test.enabled=false", + "management.endpoint.health.enabled=false") + .run((context) -> assertThat(context).hasBean("info") + .doesNotHaveBean("health").doesNotHaveBean("test") + .hasBean("spring").doesNotHaveBean("shutdown")); + } + + @Test + public void outcomeWhenIncludeAllWebAndEnablingEndpointDisabledByDefaultShouldMatchAll() { + this.contextRunner + .withPropertyValues("management.endpoints.web.exposure.include=*", + "management.endpoint.shutdown.enabled=true") + .run((context) -> assertThat(context).hasBean("info").hasBean("health") + .hasBean("test").hasBean("spring").hasBean("shutdown")); } @Test @@ -57,16 +87,27 @@ public class ConditionalOnExposedEndpointTests { this.contextRunner .withPropertyValues("management.endpoints.jmx.exposure.include=*") .run((context) -> assertThat(context).hasBean("info").hasBean("health") - .doesNotHaveBean("spring").doesNotHaveBean("test")); + .doesNotHaveBean("spring").doesNotHaveBean("test") + .doesNotHaveBean("shutdown")); } @Test - public void outcomeWhenIncludeAllJmxAndJmxEnabledShouldMatch() { + public void outcomeWhenIncludeAllJmxAndJmxEnabledShouldMatchEnabledEndpoints() { this.contextRunner .withPropertyValues("management.endpoints.jmx.exposure.include=*", "spring.jmx.enabled=true") .run((context) -> assertThat(context).hasBean("info").hasBean("health") - .hasBean("test").hasBean("spring")); + .hasBean("test").hasBean("spring").doesNotHaveBean("shutdown")); + } + + @Test + public void outcomeWhenIncludeAllJmxAndJmxEnabledAndEnablingEndpointDisabledByDefaultShouldMatchAll() { + this.contextRunner + .withPropertyValues("management.endpoints.jmx.exposure.include=*", + "spring.jmx.enabled=true", + "management.endpoint.shutdown.enabled=true") + .run((context) -> assertThat(context).hasBean("info").hasBean("health") + .hasBean("test").hasBean("spring").hasBean("shutdown")); } @Test @@ -75,7 +116,8 @@ public class ConditionalOnExposedEndpointTests { .withPropertyValues("management.endpoints.web.exposure.include=*", "management.endpoints.web.exposure.exclude=spring,info") .run((context) -> assertThat(context).hasBean("health").hasBean("test") - .doesNotHaveBean("info").doesNotHaveBean("spring")); + .doesNotHaveBean("info").doesNotHaveBean("spring") + .doesNotHaveBean("shutdown")); } @Test @@ -84,16 +126,36 @@ public class ConditionalOnExposedEndpointTests { "management.endpoints.web.exposure.include=info,health,spring,test", "management.endpoints.web.exposure.exclude=spring,info") .run((context) -> assertThat(context).hasBean("health").hasBean("test") - .doesNotHaveBean("info").doesNotHaveBean("spring")); + .doesNotHaveBean("info").doesNotHaveBean("spring") + .doesNotHaveBean("shutdown")); } @Test - public void outcomeWhenIncludeMatchesShouldMatch() { + public void outcomeWhenIncludeMatchesShouldMatchEnabledEndpoints() { this.contextRunner .withPropertyValues("management.endpoints.web.exposure.include=spring") .run((context) -> assertThat(context).hasBean("spring") .doesNotHaveBean("health").doesNotHaveBean("info") - .doesNotHaveBean("test")); + .doesNotHaveBean("test").doesNotHaveBean("shutdown")); + } + + @Test + public void outcomeWhenIncludeMatchOnDisabledEndpointShouldNotMatch() { + this.contextRunner + .withPropertyValues("management.endpoints.web.exposure.include=shutdown") + .run((context) -> assertThat(context).doesNotHaveBean("spring") + .doesNotHaveBean("health").doesNotHaveBean("info") + .doesNotHaveBean("test").doesNotHaveBean("shutdown")); + } + + @Test + public void outcomeWhenIncludeMatchOnEnabledEndpointShouldNotMatch() { + this.contextRunner + .withPropertyValues("management.endpoints.web.exposure.include=shutdown", + "management.endpoint.shutdown.enabled=true") + .run((context) -> assertThat(context).doesNotHaveBean("spring") + .doesNotHaveBean("health").doesNotHaveBean("info") + .doesNotHaveBean("test").hasBean("shutdown")); } @Test @@ -102,7 +164,7 @@ public class ConditionalOnExposedEndpointTests { .withPropertyValues("management.endpoints.web.exposure.include=sPRing") .run((context) -> assertThat(context).hasBean("spring") .doesNotHaveBean("health").doesNotHaveBean("info") - .doesNotHaveBean("test")); + .doesNotHaveBean("test").doesNotHaveBean("shutdown")); } @Test @@ -112,11 +174,11 @@ public class ConditionalOnExposedEndpointTests { "management.endpoints.web.exposure.exclude=*") .run((context) -> assertThat(context).doesNotHaveBean("health") .doesNotHaveBean("info").doesNotHaveBean("spring") - .doesNotHaveBean("test")); + .doesNotHaveBean("test").doesNotHaveBean("shutdown")); } @Test - public void outcomeWhenIncludeMatchesShoulMatchWithExtensionsAndComponents() { + public void outcomeWhenIncludeMatchesShouldMatchWithExtensionsAndComponents() { this.contextRunner .withUserConfiguration( ComponentEnabledIfEndpointIsExposedConfiguration.class) @@ -124,7 +186,7 @@ public class ConditionalOnExposedEndpointTests { .run((context) -> assertThat(context).hasBean("spring") .hasBean("springComponent").hasBean("springExtension") .doesNotHaveBean("info").doesNotHaveBean("health") - .doesNotHaveBean("test")); + .doesNotHaveBean("test").doesNotHaveBean("shutdown")); } @Test @@ -169,6 +231,11 @@ public class ConditionalOnExposedEndpointTests { } + @Endpoint(id = "shutdown", enableByDefault = false) + static class ShutdownEndpoint { + + } + @EndpointExtension(endpoint = SpringEndpoint.class, filter = TestFilter.class) static class SpringEndpointExtension { @@ -187,42 +254,48 @@ public class ConditionalOnExposedEndpointTests { static class AllEndpointsConfiguration { @Bean - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public HealthEndpoint health() { return new HealthEndpoint(); } @Bean - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public InfoEndpoint info() { return new InfoEndpoint(); } @Bean - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public SpringEndpoint spring() { return new SpringEndpoint(); } @Bean - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public TestEndpoint test() { return new TestEndpoint(); } + @Bean + @ConditionalOnAvailableEndpoint + public ShutdownEndpoint shutdown() { + return new ShutdownEndpoint(); + } + } @Configuration(proxyBeanMethods = false) static class ComponentEnabledIfEndpointIsExposedConfiguration { @Bean - @ConditionalOnExposedEndpoint(endpoint = SpringEndpoint.class) + @ConditionalOnAvailableEndpoint(endpoint = SpringEndpoint.class) public String springComponent() { return "springComponent"; } @Bean - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public SpringEndpointExtension springExtension() { return new SpringEndpointExtension(); } @@ -233,7 +306,7 @@ public class ConditionalOnExposedEndpointTests { static class ComponentWithNoEndpointReferenceConfiguration { @Bean - @ConditionalOnExposedEndpoint + @ConditionalOnAvailableEndpoint public String springcomp() { return "springcomp"; } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java index 96ec532656..262982394b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/ConditionalOnEnabledEndpointTests.java @@ -34,6 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Stephane Nicoll * @author Andy Wilkinson */ +@Deprecated public class ConditionalOnEnabledEndpointTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner();