diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfiguration.java index 40d79038d6e..980a0326f22 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfiguration.java @@ -66,7 +66,8 @@ public class WebFluxMetricsAutoConfiguration { public MetricsWebFilter webfluxMetrics(MeterRegistry registry, WebFluxTagsProvider tagConfigurer) { return new MetricsWebFilter(registry, tagConfigurer, - this.properties.getWeb().getServer().getRequestsMetricName()); + this.properties.getWeb().getServer().getRequestsMetricName(), + this.properties.getWeb().getServer().isAutoTimeRequests()); } @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java index 747f6f1db82..ffa5994cb49 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/reactive/WebFluxMetricsAutoConfigurationTests.java @@ -96,6 +96,19 @@ public class WebFluxMetricsAutoConfigurationTests { }); } + @Test + public void metricsAreNotRecordedIfAutoTimeRequestsIsDisabled() { + this.contextRunner + .withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class)) + .withUserConfiguration(TestController.class) + .withPropertyValues( + "management.metrics.web.server.auto-time-requests=false") + .run((context) -> { + MeterRegistry registry = getInitializedMeterRegistry(context); + assertThat(registry.find("http.server.requests").meter()).isNull(); + }); + } + private MeterRegistry getInitializedMeterRegistry( AssertableReactiveWebApplicationContext context) { WebTestClient webTestClient = WebTestClient.bindToApplicationContext(context) diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/reactive/server/MetricsWebFilter.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/reactive/server/MetricsWebFilter.java index 14435516d38..e2c3e3bc55d 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/reactive/server/MetricsWebFilter.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/reactive/server/MetricsWebFilter.java @@ -46,16 +46,36 @@ public class MetricsWebFilter implements WebFilter { private final String metricName; + private final boolean autoTimeRequests; + + /** + * Create a new {@code MetricsWebFilter}. + * @param registry the registry to which metrics are recorded + * @param tagsProvider provider for metrics tags + * @param metricName name of the metric to record + * @deprecated since 2.0.6 in favour of + * {@link #MetricsWebFilter(MeterRegistry, WebFluxTagsProvider, String, boolean)} + */ + @Deprecated public MetricsWebFilter(MeterRegistry registry, WebFluxTagsProvider tagsProvider, String metricName) { + this(registry, tagsProvider, metricName, true); + } + + public MetricsWebFilter(MeterRegistry registry, WebFluxTagsProvider tagsProvider, + String metricName, boolean autoTimeRequests) { this.registry = registry; this.tagsProvider = tagsProvider; this.metricName = metricName; + this.autoTimeRequests = autoTimeRequests; } @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { - return chain.filter(exchange).compose((call) -> filter(exchange, call)); + if (this.autoTimeRequests) { + return chain.filter(exchange).compose((call) -> filter(exchange, call)); + } + return chain.filter(exchange); } private Publisher filter(ServerWebExchange exchange, Mono call) {