From 2f1b2e3ce2b4f7f8de3e64993380ea6121ef7996 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 13 Mar 2018 14:12:57 +0000 Subject: [PATCH] Log summary of web-exposed endpoints during startup Closes gh-12442 --- ...ndpointManagementContextConfiguration.java | 3 +- ...ndpointManagementContextConfiguration.java | 3 +- ...ndpointManagementContextConfiguration.java | 3 +- .../endpoint/web/EndpointLinksResolver.java | 28 +++++++++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java index 39f753c41a7..29b120a74c0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/jersey/JerseyWebEndpointManagementContextConfiguration.java @@ -33,7 +33,6 @@ import org.springframework.boot.actuate.endpoint.web.EndpointMapping; import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes; import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint; import org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier; -import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier; import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier; import org.springframework.boot.actuate.endpoint.web.jersey.JerseyEndpointResourceFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -76,7 +75,7 @@ class JerseyWebEndpointManagementContextConfiguration { resourceConfig.registerResources( new HashSet<>(resourceFactory.createEndpointResources(endpointMapping, webEndpoints, endpointMediaTypes, - new EndpointLinksResolver(allEndpoints)))); + new EndpointLinksResolver(allEndpoints, basePath)))); }; } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java index 8124b490ff9..f46b9077e89 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/reactive/WebFluxEndpointManagementContextConfiguration.java @@ -72,7 +72,8 @@ public class WebFluxEndpointManagementContextConfiguration { allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints()); return new WebFluxEndpointHandlerMapping(endpointMapping, endpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), - new EndpointLinksResolver(allEndpoints)); + new EndpointLinksResolver(allEndpoints, + webEndpointProperties.getBasePath())); } @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java index 679760eb679..07e3bff034c 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/servlet/WebMvcEndpointManagementContextConfiguration.java @@ -75,7 +75,8 @@ public class WebMvcEndpointManagementContextConfiguration { webEndpointProperties.getBasePath()); return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), - new EndpointLinksResolver(allEndpoints)); + new EndpointLinksResolver(allEndpoints, + webEndpointProperties.getBasePath())); } @Bean diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java index dbcee560c70..ae103eb60cb 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/EndpointLinksResolver.java @@ -20,6 +20,9 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.boot.actuate.endpoint.ExposableEndpoint; /** @@ -30,12 +33,37 @@ import org.springframework.boot.actuate.endpoint.ExposableEndpoint; */ public class EndpointLinksResolver { + private static final Log logger = LogFactory.getLog(EndpointLinksResolver.class); + private final Collection> endpoints; + /** + * Creates a new {@code EndpointLinksResolver} that will resolve links to the given + * {@code endpoints}. + * @param endpoints the endpoints + * @deprecated since 2.0.1 in favor of + * {@link #EndpointLinksResolver(Collection, String)} + */ + @Deprecated public EndpointLinksResolver(Collection> endpoints) { this.endpoints = endpoints; } + /** + * Creates a new {@code EndpointLinksResolver} that will resolve links to the given + * {@code endpoints} that are exposed beneath the given {@code basePath}. + * @param endpoints the endpoints + * @param basePath the basePath + */ + public EndpointLinksResolver(Collection> endpoints, + String basePath) { + this.endpoints = endpoints; + if (logger.isInfoEnabled()) { + logger.info("Exposing " + endpoints.size() + + " endpoint(s) beneath base path '" + basePath + "'"); + } + } + /** * Resolves links to the known endpoints based on a request with the given * {@code requestUrl}.