From 2ceee789ce5ba271121704a90d87bba7610d10ab Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Tue, 29 Nov 2022 10:39:19 +0100 Subject: [PATCH] Fix bug where ZipkinRestTemplateBuilderCustomizer had no effect Closes gh-33399 --- .../tracing/zipkin/ZipkinConfigurations.java | 13 ++++++++++++- .../ZipkinRestTemplateBuilderCustomizer.java | 3 ++- ...pkinConfigurationsSenderConfigurationTests.java | 14 ++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurations.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurations.java index 7bd8584a0de5..b3ba5d2d3e35 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurations.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurations.java @@ -80,10 +80,21 @@ ZipkinRestTemplateSender restTemplateSender(ZipkinProperties properties, ObjectProvider customizers) { RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder() .setConnectTimeout(properties.getConnectTimeout()).setReadTimeout(properties.getReadTimeout()); - customizers.orderedStream().forEach((customizer) -> customizer.customize(restTemplateBuilder)); + restTemplateBuilder = applyCustomizers(restTemplateBuilder, customizers); return new ZipkinRestTemplateSender(properties.getEndpoint(), restTemplateBuilder.build()); } + private RestTemplateBuilder applyCustomizers(RestTemplateBuilder restTemplateBuilder, + ObjectProvider customizers) { + Iterable orderedCustomizers = () -> customizers.orderedStream() + .iterator(); + RestTemplateBuilder currentBuilder = restTemplateBuilder; + for (ZipkinRestTemplateBuilderCustomizer customizer : orderedCustomizers) { + currentBuilder = customizer.customize(currentBuilder); + } + return currentBuilder; + } + } @Configuration(proxyBeanMethods = false) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinRestTemplateBuilderCustomizer.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinRestTemplateBuilderCustomizer.java index a1ee937d3e7f..eef1ec385b91 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinRestTemplateBuilderCustomizer.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinRestTemplateBuilderCustomizer.java @@ -31,7 +31,8 @@ public interface ZipkinRestTemplateBuilderCustomizer { /** * Customize the rest template builder. * @param restTemplateBuilder the {@code RestTemplateBuilder} to customize + * @return the customized {@code RestTemplateBuilder} */ - void customize(RestTemplateBuilder restTemplateBuilder); + RestTemplateBuilder customize(RestTemplateBuilder restTemplateBuilder); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java index 43f7577d04a0..a7dbfb889e66 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsSenderConfigurationTests.java @@ -27,6 +27,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.function.client.WebClient; @@ -143,8 +144,8 @@ void shouldBackOffOnCustomBeans() { private static class RestTemplateConfiguration { @Bean - ZipkinRestTemplateBuilderCustomizer restTemplateBuilder() { - return mock(ZipkinRestTemplateBuilderCustomizer.class); + ZipkinRestTemplateBuilderCustomizer zipkinRestTemplateBuilderCustomizer() { + return new DummyZipkinRestTemplateBuilderCustomizer(); } } @@ -169,4 +170,13 @@ Sender customSender() { } + private static class DummyZipkinRestTemplateBuilderCustomizer implements ZipkinRestTemplateBuilderCustomizer { + + @Override + public RestTemplateBuilder customize(RestTemplateBuilder restTemplateBuilder) { + return restTemplateBuilder; + } + + } + }