From 791fd90359598c8e41cb89bd6f04272fc08720d4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 30 May 2025 10:03:37 +0100 Subject: [PATCH] Move WebFlux observation auto-config into spring-boot-webflux Issue: 46138 --- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../metrics/test/MetricsIntegrationTests.java | 2 +- .../spring-boot-webflux/build.gradle | 2 ++ .../WebFluxObservationAutoConfiguration.java | 10 +++---- .../autoconfigure}/package-info.java | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 + ...FluxObservationAutoConfigurationTests.java | 29 ++++++++++++++++--- src/checkstyle/import-control.xml | 4 +++ 8 files changed, 39 insertions(+), 12 deletions(-) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive => spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure}/WebFluxObservationAutoConfiguration.java (89%) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive => spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure}/package-info.java (89%) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive => spring-boot-webflux/src/test/java/org/springframework/boot/webflux/observation/autoconfigure}/WebFluxObservationAutoConfigurationTests.java (91%) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 36d05d2e96f..7bb36bf448b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -16,7 +16,6 @@ org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAuto org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.task.TaskExecutorMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.observability.ObservabilityAutoConfiguration -org.springframework.boot.actuate.autoconfigure.observation.web.reactive.WebFluxObservationAutoConfiguration org.springframework.boot.actuate.autoconfigure.observation.web.servlet.WebMvcObservationAutoConfiguration org.springframework.boot.actuate.autoconfigure.sbom.SbomEndpointAutoConfiguration org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java index 7ea8b9e7365..e7030f3c37f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java @@ -35,7 +35,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.autoconfigure.observability.ObservabilityAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.observation.web.reactive.WebFluxObservationAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.observation.web.servlet.WebMvcObservationAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration; @@ -55,6 +54,7 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration; import org.springframework.boot.web.server.test.client.TestRestTemplate; import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.boot.webflux.observation.autoconfigure.WebFluxObservationAutoConfiguration; import org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration; import org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration; import org.springframework.context.ApplicationContext; diff --git a/spring-boot-project/spring-boot-webflux/build.gradle b/spring-boot-project/spring-boot-webflux/build.gradle index c5312454cfd..69a90811a96 100644 --- a/spring-boot-project/spring-boot-webflux/build.gradle +++ b/spring-boot-project/spring-boot-webflux/build.gradle @@ -35,6 +35,8 @@ dependencies { optional(project(":spring-boot-project:spring-boot-actuator")) optional(project(":spring-boot-project:spring-boot-autoconfigure")) + optional(project(":spring-boot-project:spring-boot-metrics")) + optional(project(":spring-boot-project:spring-boot-micrometer-observation")) optional(project(":spring-boot-project:spring-boot-validation")) testFixturesApi(testFixtures(project(":spring-boot-project:spring-boot-actuator"))) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfiguration.java b/spring-boot-project/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure/WebFluxObservationAutoConfiguration.java similarity index 89% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfiguration.java rename to spring-boot-project/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure/WebFluxObservationAutoConfiguration.java index ff0613512d1..96f3ab1ceab 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfiguration.java +++ b/spring-boot-project/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure/WebFluxObservationAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.observation.web.reactive; +package org.springframework.boot.webflux.observation.autoconfigure; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.config.MeterFilter; @@ -30,8 +30,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.metrics.OnlyOnceLoggingDenyMeterFilter; import org.springframework.boot.metrics.autoconfigure.MetricsProperties; -import org.springframework.boot.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration; -import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration; import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties; import org.springframework.context.annotation.Bean; import org.springframework.core.annotation.Order; @@ -46,9 +44,11 @@ import org.springframework.http.server.reactive.observation.ServerRequestObserva * @author Jon Schneider * @author Dmytro Nosan * @author Moritz Halbritter - * @since 3.0.0 + * @since 4.0.0 */ -@AutoConfiguration(after = { SimpleMetricsExportAutoConfiguration.class, ObservationAutoConfiguration.class }) +@AutoConfiguration(afterName = { + "org.springframework.boot.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration", + "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" }) @ConditionalOnClass({ Observation.class, MeterRegistry.class }) @ConditionalOnBean({ ObservationRegistry.class, MeterRegistry.class }) @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/package-info.java b/spring-boot-project/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure/package-info.java similarity index 89% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/package-info.java rename to spring-boot-project/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure/package-info.java index ba2f819b506..29735a7f2e0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/package-info.java +++ b/spring-boot-project/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/observation/autoconfigure/package-info.java @@ -17,4 +17,4 @@ /** * Auto-configuration for WebFlux actuator observations. */ -package org.springframework.boot.actuate.autoconfigure.observation.web.reactive; +package org.springframework.boot.webflux.observation.autoconfigure; diff --git a/spring-boot-project/spring-boot-webflux/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-webflux/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 68031040471..62e2c9a046d 100644 --- a/spring-boot-project/spring-boot-webflux/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-webflux/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,3 +3,4 @@ org.springframework.boot.webflux.autoconfigure.ReactiveMultipartAutoConfiguratio org.springframework.boot.webflux.autoconfigure.WebFluxAutoConfiguration org.springframework.boot.webflux.autoconfigure.WebSessionIdResolverAutoConfiguration org.springframework.boot.webflux.autoconfigure.error.ErrorWebFluxAutoConfiguration +org.springframework.boot.webflux.observation.autoconfigure.WebFluxObservationAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfigurationTests.java b/spring-boot-project/spring-boot-webflux/src/test/java/org/springframework/boot/webflux/observation/autoconfigure/WebFluxObservationAutoConfigurationTests.java similarity index 91% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfigurationTests.java rename to spring-boot-project/spring-boot-webflux/src/test/java/org/springframework/boot/webflux/observation/autoconfigure/WebFluxObservationAutoConfigurationTests.java index cb84a43a5c6..6aa17e9e9e1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-webflux/src/test/java/org/springframework/boot/webflux/observation/autoconfigure/WebFluxObservationAutoConfigurationTests.java @@ -14,17 +14,16 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.observation.web.reactive; +package org.springframework.boot.webflux.observation.autoconfigure; import java.time.Duration; import java.time.temporal.ChronoUnit; import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun; -import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration; @@ -35,6 +34,8 @@ import org.springframework.boot.test.system.OutputCaptureExtension; import org.springframework.boot.webflux.autoconfigure.WebFluxAutoConfiguration; import org.springframework.http.server.reactive.observation.DefaultServerRequestObservationConvention; import org.springframework.http.server.reactive.observation.ServerRequestObservationConvention; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -51,7 +52,7 @@ import static org.mockito.Mockito.mock; class WebFluxObservationAutoConfigurationTests { private final ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner() - .with(MetricsRun.simple()) + .withBean(SimpleMeterRegistry.class) .withConfiguration( AutoConfigurations.of(ObservationAutoConfiguration.class, WebFluxObservationAutoConfiguration.class)); @@ -130,4 +131,24 @@ class WebFluxObservationAutoConfigurationTests { return meterRegistry; } + @RestController + static class TestController { + + @GetMapping("test0") + String test0() { + return "test0"; + } + + @GetMapping("test1") + String test1() { + return "test1"; + } + + @GetMapping("test2") + String test2() { + return "test2"; + } + + } + } diff --git a/src/checkstyle/import-control.xml b/src/checkstyle/import-control.xml index ebc0c3c0cea..06add03a8b3 100644 --- a/src/checkstyle/import-control.xml +++ b/src/checkstyle/import-control.xml @@ -61,6 +61,10 @@ + + + +