org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint Maven / Gradle / Ivy
/*
* Copyright 2012-2021 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
*
* https://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.condition;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension;
import org.springframework.context.annotation.Conditional;
import org.springframework.core.env.Environment;
/**
* {@link Conditional @Conditional} that checks whether an endpoint is available. An
* endpoint is considered available if it is both enabled and exposed on the specified
* technologies. 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.
*
* When placed on a {@code @Bean} method, the endpoint defaults to the return type of the
* factory method:
*
*
* @Configuration
* public class MyConfiguration {
*
* @ConditionalOnAvailableEndpoint
* @Bean
* public MyEndpoint myEndpoint() {
* ...
* }
*
* }
*
* It is also possible to use the same mechanism for extensions:
*
*
* @Configuration
* public class MyConfiguration {
*
* @ConditionalOnAvailableEndpoint
* @Bean
* public MyEndpointWebExtension myEndpointWebExtension() {
* ...
* }
*
* }
*
* In the sample above, {@code MyEndpointWebExtension} will be created if the endpoint is
* 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)
* public class MyEndpointWebExtension {
*
* }
*
* Alternatively, the target endpoint can be manually specified for components that should
* only be created when a given endpoint is available:
*
*
* @Configuration
* public class MyConfiguration {
*
* @ConditionalOnAvailableEndpoint(endpoint = MyEndpoint.class)
* @Bean
* public MyComponent myComponent() {
* ...
* }
*
* }
*
* @author Brian Clozel
* @author Stephane Nicoll
* @since 2.2.0
* @see Endpoint
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
@Documented
@Conditional(OnAvailableEndpointCondition.class)
public @interface ConditionalOnAvailableEndpoint {
/**
* The endpoint type that should be checked. Inferred when the return type of the
* {@code @Bean} method is either an {@link Endpoint @Endpoint} or an
* {@link EndpointExtension @EndpointExtension}.
* @return the endpoint type to check
*/
Class endpoint() default Void.class;
/**
* Technologies to check the exposure of the endpoint on while considering it to be
* available.
* @return the technologies to check
* @since 2.6.0
*/
EndpointExposure[] exposure() default {};
}