From bf9cfe5cc19eb96cea27f046d70b8ca9c99ad5cd Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 6 May 2020 17:38:18 +0200 Subject: [PATCH] Move TraceSchedulingAutoConfiguration @Conditional for optional AspectJ Co-authored-by: Tim te Beek --- .../TraceSchedulingAutoConfiguration.java | 4 +- .../web/client/feign/TracingFeignClient.java | 3 +- .../TraceSchedulingAutoConfigurationTest.java | 49 +++++++++++++++++++ .../client/feign/TracingFeignClientTests.java | 19 ++++--- 4 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfigurationTest.java diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfiguration.java index 7426c6803..afff9e4d6 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfiguration.java @@ -29,7 +29,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.EnableAspectJAutoProxy; /** * Registers beans related to task scheduling. @@ -40,7 +39,7 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy; * @see TraceSchedulingAspect */ @Configuration(proxyBeanMethods = false) -@EnableAspectJAutoProxy +@ConditionalOnClass(name = "org.aspectj.lang.ProceedingJoinPoint") @ConditionalOnProperty(value = "spring.sleuth.scheduled.enabled", matchIfMissing = true) @ConditionalOnBean(Tracing.class) @AutoConfigureAfter(TraceAutoConfiguration.class) @@ -48,7 +47,6 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy; public class TraceSchedulingAutoConfiguration { @Bean - @ConditionalOnClass(name = "org.aspectj.lang.ProceedingJoinPoint") public TraceSchedulingAspect traceSchedulingAspect(Tracer tracer, SleuthSchedulingProperties sleuthSchedulingProperties) { String skipPatternString = sleuthSchedulingProperties.getSkipPattern(); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java index 601d487ca..3039ecb54 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java @@ -176,7 +176,8 @@ final class TracingFeignClient implements Client { String url = delegate.url(); byte[] body = delegate.body(); Charset charset = delegate.charset(); - return Request.create(delegate.httpMethod(), url, headers, body, charset, delegate.requestTemplate()); + return Request.create(delegate.httpMethod(), url, headers, body, charset, + delegate.requestTemplate()); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfigurationTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfigurationTest.java new file mode 100644 index 000000000..f187ad4e6 --- /dev/null +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAutoConfigurationTest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.instrument.scheduling; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.FilteredClassLoader; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; + +class TraceSchedulingAutoConfigurationTest { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(TraceAutoConfiguration.class, + TraceSchedulingAutoConfiguration.class)); + + @Test + void shoud_create_TraceSchedulingAspect() { + this.contextRunner.run(context -> assertThat(context) + .hasSingleBean(TraceSchedulingAspect.class)); + } + + @Test + void shoud_not_create_TraceSchedulingAspect_without_aspectJ() { + this.contextRunner + .withClassLoader(new FilteredClassLoader(ProceedingJoinPoint.class)) + .run(context -> assertThat(context) + .doesNotHaveBean(TraceSchedulingAspect.class)); + } + +} diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java index fe0c8da9c..82e9153ff 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClientTests.java @@ -52,7 +52,8 @@ public class TracingFeignClientTests { RequestTemplate requestTemplate = new RequestTemplate(); - Request request = Request.create(Request.HttpMethod.GET, "https://foo", new HashMap<>(), null, null, requestTemplate); + Request request = Request.create(Request.HttpMethod.GET, "https://foo", + new HashMap<>(), null, null, requestTemplate); Request.Options options = new Request.Options(); @@ -121,13 +122,15 @@ public class TracingFeignClientTests { @Test public void keep_requestTemplate() throws IOException { - BDDMockito.given(this.client.execute(BDDMockito.any(), BDDMockito.any())).willAnswer(new Answer() { - public Object answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - Assert.assertEquals(((Request) args[0]).requestTemplate(), requestTemplate); - return null; - } - }); + BDDMockito.given(this.client.execute(BDDMockito.any(), BDDMockito.any())) + .willAnswer(new Answer() { + public Object answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + Assert.assertEquals(((Request) args[0]).requestTemplate(), + requestTemplate); + return null; + } + }); this.traceFeignClient.execute(this.request, this.options); }