From c82a9be5d577223bdd57407667184362bcc5e404 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 1 Dec 2020 13:44:12 +0100 Subject: [PATCH] Added conditional on class for web auto configuration; fixes gh-1790 --- .../web/TraceWebServletAutoConfiguration.java | 2 ++ .../TraceWebServletAutoConfigurationTests.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfiguration.java index f5a71efba..b919a5398 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfiguration.java @@ -44,6 +44,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; /** * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration @@ -61,6 +62,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnBean(HttpTracing.class) @AutoConfigureAfter(TraceHttpAutoConfiguration.class) +@ConditionalOnClass(HandlerInterceptorAdapter.class) @Import(SpanCustomizingAsyncHandlerInterceptor.class) public class TraceWebServletAutoConfiguration { diff --git a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfigurationTests.java b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfigurationTests.java index 9bf7035bb..8a25f550a 100644 --- a/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfigurationTests.java +++ b/tests/spring-cloud-sleuth-instrumentation-mvc-tests/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebServletAutoConfigurationTests.java @@ -19,8 +19,10 @@ package org.springframework.cloud.sleuth.instrument.web; import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import static org.assertj.core.api.Assertions.assertThat; @@ -36,6 +38,20 @@ public class TraceWebServletAutoConfigurationTests { TraceHttpAutoConfiguration.class, TraceWebAutoConfiguration.class, TraceWebServletAutoConfiguration.class)); + @Test + public void shouldNotCreateTracedWebBeansWhenServletClassMissing() { + this.contextRunner.withClassLoader(new FilteredClassLoader(HandlerInterceptorAdapter.class)).run((context) -> { + assertThat(context).doesNotHaveBean(TraceWebAspect.class); + }); + } + + @Test + public void shouldCreateTracedWebBeansWhenServletClassNotMissing() { + this.contextRunner.run((context) -> { + assertThat(context).hasSingleBean(TraceWebAspect.class); + }); + } + @Test public void shouldNotCreateExceptionLoggingFilterBeanByDefault() { this.contextRunner.run((context) -> {