Browse Source
Extract @ConditionalOnEnabledEndpoint to a top level class. See gh-2798pull/3241/head
4 changed files with 144 additions and 85 deletions
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
/* |
||||
* Copyright 2012-2015 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.condition; |
||||
|
||||
import java.lang.annotation.ElementType; |
||||
import java.lang.annotation.Retention; |
||||
import java.lang.annotation.RetentionPolicy; |
||||
import java.lang.annotation.Target; |
||||
|
||||
import org.springframework.context.annotation.Conditional; |
||||
|
||||
/** |
||||
* {@link Conditional} that checks whether or not an endpoint is enabled. Matches if the |
||||
* value of the {@code endpoints.<name>.enabled} property is {@code true}. Does not match |
||||
* if the property's value or {@code enabledByDefault} is {@code false}. Otherwise, |
||||
* matches if the value of the {@code endpoints.enabled} property is {@code true} or if |
||||
* the property is not configured. |
||||
* |
||||
* @author Andy Wilkinson |
||||
* @since 1.2.4 |
||||
*/ |
||||
@Conditional(OnEnabledEndpointCondition.class) |
||||
@Retention(RetentionPolicy.RUNTIME) |
||||
@Target(ElementType.METHOD) |
||||
public @interface ConditionalOnEnabledEndpoint { |
||||
|
||||
/** |
||||
* The name of the endpoint. |
||||
* @return The name of the endpoint |
||||
*/ |
||||
public String value(); |
||||
|
||||
/** |
||||
* Returns whether or not the endpoint is enabled by default. |
||||
* @return {@code true} if the endpoint is enabled by default, otherwise {@code false} |
||||
*/ |
||||
public boolean enabledByDefault() default true; |
||||
|
||||
} |
||||
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
/* |
||||
* Copyright 2012-2015 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.condition; |
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionOutcome; |
||||
import org.springframework.boot.autoconfigure.condition.SpringBootCondition; |
||||
import org.springframework.boot.bind.RelaxedPropertyResolver; |
||||
import org.springframework.context.annotation.Condition; |
||||
import org.springframework.context.annotation.ConditionContext; |
||||
import org.springframework.core.annotation.AnnotationAttributes; |
||||
import org.springframework.core.type.AnnotatedTypeMetadata; |
||||
|
||||
/** |
||||
* {@link Condition} that checks whether or not an endpoint is enabled. |
||||
* |
||||
* @author Andy Wilkinson |
||||
*/ |
||||
class OnEnabledEndpointCondition extends SpringBootCondition { |
||||
|
||||
@Override |
||||
public ConditionOutcome getMatchOutcome(ConditionContext context, |
||||
AnnotatedTypeMetadata metadata) { |
||||
AnnotationAttributes annotationAttributes = AnnotationAttributes.fromMap(metadata |
||||
.getAnnotationAttributes(ConditionalOnEnabledEndpoint.class.getName())); |
||||
String endpointName = annotationAttributes.getString("value"); |
||||
boolean enabledByDefault = annotationAttributes.getBoolean("enabledByDefault"); |
||||
ConditionOutcome outcome = determineEndpointOutcome(endpointName, |
||||
enabledByDefault, context); |
||||
if (outcome != null) { |
||||
return outcome; |
||||
} |
||||
return determineAllEndpointsOutcome(context); |
||||
} |
||||
|
||||
private ConditionOutcome determineEndpointOutcome(String endpointName, |
||||
boolean enabledByDefault, ConditionContext context) { |
||||
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver( |
||||
context.getEnvironment(), "endpoints." + endpointName + "."); |
||||
if (resolver.containsProperty("enabled") || !enabledByDefault) { |
||||
boolean match = resolver.getProperty("enabled", Boolean.class, |
||||
enabledByDefault); |
||||
return new ConditionOutcome(match, "The " + endpointName + " is " |
||||
+ (match ? "enabled" : "disabled")); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
private ConditionOutcome determineAllEndpointsOutcome(ConditionContext context) { |
||||
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver( |
||||
context.getEnvironment(), "endpoints."); |
||||
boolean match = Boolean.valueOf(resolver.getProperty("enabled", "true")); |
||||
return new ConditionOutcome(match, "All endpoints are " |
||||
+ (match ? "enabled" : "disabled") + " by default"); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/* |
||||
* Copyright 2012-2015 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. |
||||
*/ |
||||
|
||||
/** |
||||
* {@code @Condition} annotations and supporting classes. |
||||
*/ |
||||
package org.springframework.boot.actuate.condition; |
||||
Loading…
Reference in new issue