Skip to content

Commit 6a75caf

Browse files
committed
Separates GatewayTracingAutoConfiguration from GatewayMetricsAutoConfiguration
This fixes ordering and classpath problems now that boot has separate autoconfiguration classes. Fixes gh-4006
1 parent 0b82174 commit 6a75caf

File tree

3 files changed

+57
-26
lines changed

3 files changed

+57
-26
lines changed

spring-cloud-gateway-server-webflux/src/main/java/org/springframework/cloud/gateway/config/GatewayMetricsAutoConfiguration.java

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020

2121
import io.micrometer.core.instrument.MeterRegistry;
2222
import io.micrometer.observation.ObservationRegistry;
23-
import io.micrometer.tracing.Tracer;
24-
import io.micrometer.tracing.propagation.Propagator;
2523

2624
import org.springframework.beans.factory.ObjectProvider;
2725
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -35,12 +33,9 @@
3533
import org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration;
3634
import org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration;
3735
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
38-
import org.springframework.boot.micrometer.tracing.autoconfigure.MicrometerTracingAutoConfiguration;
39-
import org.springframework.boot.micrometer.tracing.autoconfigure.TracingProperties;
4036
import org.springframework.boot.webflux.autoconfigure.HttpHandlerAutoConfiguration;
4137
import org.springframework.cloud.gateway.filter.GatewayMetricsFilter;
4238
import org.springframework.cloud.gateway.filter.headers.observation.GatewayObservationConvention;
43-
import org.springframework.cloud.gateway.filter.headers.observation.GatewayPropagatingSenderTracingObservationHandler;
4439
import org.springframework.cloud.gateway.filter.headers.observation.ObservationClosingWebExceptionHandler;
4540
import org.springframework.cloud.gateway.filter.headers.observation.ObservedRequestHttpHeadersFilter;
4641
import org.springframework.cloud.gateway.filter.headers.observation.ObservedResponseHttpHeadersFilter;
@@ -62,9 +57,8 @@
6257
@EnableConfigurationProperties(GatewayMetricsProperties.class)
6358
@AutoConfigureBefore(HttpHandlerAutoConfiguration.class)
6459
@AutoConfigureAfter({ MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class,
65-
ObservationAutoConfiguration.class, MicrometerTracingAutoConfiguration.class })
66-
@ConditionalOnClass({ DispatcherHandler.class, MeterRegistry.class, MetricsAutoConfiguration.class,
67-
MicrometerTracingAutoConfiguration.class })
60+
ObservationAutoConfiguration.class })
61+
@ConditionalOnClass({ DispatcherHandler.class, MeterRegistry.class, MetricsAutoConfiguration.class })
6862
public class GatewayMetricsAutoConfiguration {
6963

7064
@Bean
@@ -133,23 +127,6 @@ ObservationClosingWebExceptionHandler observationClosingWebExceptionHandler() {
133127
return new ObservationClosingWebExceptionHandler();
134128
}
135129

136-
@Configuration(proxyBeanMethods = false)
137-
@ConditionalOnClass({ Tracer.class, TracingProperties.class })
138-
@ConditionalOnBean({ Tracer.class, TracingProperties.class })
139-
static class GatewayTracingConfiguration {
140-
141-
@Bean
142-
@ConditionalOnMissingBean
143-
@ConditionalOnBean({ Propagator.class, TracingProperties.class })
144-
@Order(Ordered.HIGHEST_PRECEDENCE + 5)
145-
GatewayPropagatingSenderTracingObservationHandler gatewayPropagatingSenderTracingObservationHandler(
146-
Tracer tracer, Propagator propagator, TracingProperties tracingProperties) {
147-
return new GatewayPropagatingSenderTracingObservationHandler(tracer, propagator,
148-
tracingProperties.getBaggage().getRemoteFields());
149-
}
150-
151-
}
152-
153130
}
154131

155132
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright 2013-present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.cloud.gateway.config;
18+
19+
import io.micrometer.tracing.Tracer;
20+
import io.micrometer.tracing.propagation.Propagator;
21+
22+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
23+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
25+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
27+
import org.springframework.boot.micrometer.tracing.autoconfigure.MicrometerTracingAutoConfiguration;
28+
import org.springframework.boot.micrometer.tracing.autoconfigure.TracingProperties;
29+
import org.springframework.cloud.gateway.filter.headers.observation.GatewayPropagatingSenderTracingObservationHandler;
30+
import org.springframework.context.annotation.Bean;
31+
import org.springframework.context.annotation.Configuration;
32+
import org.springframework.core.Ordered;
33+
import org.springframework.core.annotation.Order;
34+
import org.springframework.web.reactive.DispatcherHandler;
35+
36+
@Configuration(proxyBeanMethods = false)
37+
@ConditionalOnProperty(name = GatewayProperties.PREFIX + ".observability.enabled", matchIfMissing = true)
38+
@AutoConfigureAfter({ GatewayMetricsAutoConfiguration.class, MicrometerTracingAutoConfiguration.class })
39+
@ConditionalOnClass({ DispatcherHandler.class, Tracer.class, TracingProperties.class,
40+
MicrometerTracingAutoConfiguration.class })
41+
public class GatewayTracingAutoConfiguration {
42+
43+
@Bean
44+
@ConditionalOnMissingBean
45+
@ConditionalOnBean({ Tracer.class, Propagator.class, TracingProperties.class })
46+
@Order(Ordered.HIGHEST_PRECEDENCE + 5)
47+
GatewayPropagatingSenderTracingObservationHandler gatewayPropagatingSenderTracingObservationHandler(Tracer tracer,
48+
Propagator propagator, TracingProperties tracingProperties) {
49+
return new GatewayPropagatingSenderTracingObservationHandler(tracer, propagator,
50+
tracingProperties.getBaggage().getRemoteFields());
51+
}
52+
53+
}

spring-cloud-gateway-server-webflux/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ org.springframework.cloud.gateway.config.GatewayStreamAutoConfiguration
99
org.springframework.cloud.gateway.discovery.GatewayDiscoveryClientAutoConfiguration
1010
org.springframework.cloud.gateway.config.SimpleUrlHandlerMappingGlobalCorsAutoConfiguration
1111
org.springframework.cloud.gateway.config.GatewayReactiveLoadBalancerClientAutoConfiguration
12-
org.springframework.cloud.gateway.config.LocalResponseCacheAutoConfiguration
12+
org.springframework.cloud.gateway.config.LocalResponseCacheAutoConfiguration
13+
org.springframework.cloud.gateway.config.GatewayTracingAutoConfiguration

0 commit comments

Comments
 (0)