From 1b493e602a837536c6bccfa84c96ddf6ed169ca4 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 5 Apr 2019 09:50:43 +0200 Subject: [PATCH] Added tracing for TopicConnection for JMS fixes gh-1324 --- pom.xml | 6 - spring-cloud-sleuth-core/pom.xml | 5 - .../messaging/TracingChannelInterceptor.java | 4 +- ...ingConnectionFactoryBeanPostProcessor.java | 73 ++++++++++++ .../SleuthSpanCreatorAspectMonoTests.java | 3 + .../HystrixAnnotationsIntegrationTests.java | 11 +- .../JmsTracingConfigurationTest.java | 27 +++++ .../TracingChannelInterceptorTest.java | 4 +- .../scheduling/TracingOnScheduledTests.java | 9 +- .../web/SkipPatternProviderConfigTest.java | 109 ++++++++++-------- .../instrument/web/TraceWebFluxTests.java | 3 + .../zipkin2/ZipkinDiscoveryClientTests.java | 15 +-- 12 files changed, 188 insertions(+), 81 deletions(-) diff --git a/pom.xml b/pom.xml index df044b8be..a0297a77d 100644 --- a/pom.xml +++ b/pom.xml @@ -244,12 +244,6 @@ 3.8.0 test - - net.jcip - jcip-annotations - 1.0 - test - diff --git a/spring-cloud-sleuth-core/pom.xml b/spring-cloud-sleuth-core/pom.xml index 67e3d2f8c..3caf750ef 100644 --- a/spring-cloud-sleuth-core/pom.xml +++ b/spring-cloud-sleuth-core/pom.xml @@ -336,11 +336,6 @@ 20.0 test - - net.jcip - jcip-annotations - test - diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java index 68b6c7432..8d358233f 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java @@ -272,8 +272,8 @@ public final class TracingChannelInterceptor extends ChannelInterceptorAdapter headers.setImmutable(); if (message instanceof ErrorMessage) { ErrorMessage errorMessage = (ErrorMessage) message; - return new ErrorMessage(errorMessage.getPayload(), headers.getMessageHeaders(), - errorMessage.getOriginalMessage()); + return new ErrorMessage(errorMessage.getPayload(), + headers.getMessageHeaders(), errorMessage.getOriginalMessage()); } return new GenericMessage<>(message.getPayload(), headers.getMessageHeaders()); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingConnectionFactoryBeanPostProcessor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingConnectionFactoryBeanPostProcessor.java index ecb7f9b1b..300513665 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingConnectionFactoryBeanPostProcessor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingConnectionFactoryBeanPostProcessor.java @@ -22,6 +22,8 @@ import javax.jms.JMSContext; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; +import javax.jms.TopicConnection; +import javax.jms.TopicConnectionFactory; import javax.jms.XAConnection; import javax.jms.XAConnectionFactory; import javax.jms.XAJMSContext; @@ -74,6 +76,10 @@ class TracingConnectionFactoryBeanPostProcessor implements BeanPostProcessor { return new LazyXAConnectionFactory(this.beanFactory, (XAConnectionFactory) bean); } + else if (bean instanceof TopicConnectionFactory) { + return new LazyTopicConnectionFactory(this.beanFactory, + (TopicConnectionFactory) bean); + } else if (bean instanceof ConnectionFactory) { return new LazyConnectionFactory(this.beanFactory, (ConnectionFactory) bean); } @@ -135,6 +141,73 @@ class LazyXAConnectionFactory implements XAConnectionFactory { } +class LazyTopicConnectionFactory implements TopicConnectionFactory { + + private final BeanFactory beanFactory; + + private final TopicConnectionFactory delegate; + + private final LazyConnectionFactory factory; + + private JmsTracing jmsTracing; + + LazyTopicConnectionFactory(BeanFactory beanFactory, TopicConnectionFactory delegate) { + this.beanFactory = beanFactory; + this.delegate = delegate; + this.factory = new LazyConnectionFactory(beanFactory, delegate); + } + + @Override + public TopicConnection createTopicConnection() throws JMSException { + return jmsTracing().topicConnection(this.delegate.createTopicConnection()); + } + + @Override + public TopicConnection createTopicConnection(String s, String s1) + throws JMSException { + return jmsTracing().topicConnection(this.delegate.createTopicConnection(s, s1)); + } + + @Override + public Connection createConnection() throws JMSException { + return this.factory.createConnection(); + } + + @Override + public Connection createConnection(String s, String s1) throws JMSException { + return this.factory.createConnection(s, s1); + } + + @Override + public JMSContext createContext() { + return this.factory.createContext(); + } + + @Override + public JMSContext createContext(String s, String s1) { + return this.factory.createContext(s, s1); + } + + @Override + public JMSContext createContext(String s, String s1, int i) { + return this.factory.createContext(s, s1, i); + } + + @Override + public JMSContext createContext(int i) { + return this.factory.createContext(i); + } + + private JmsTracing jmsTracing() { + if (this.jmsTracing != null) { + return this.jmsTracing; + } + this.jmsTracing = this.beanFactory.getBean(JmsTracing.class); + return this.jmsTracing; + } + +} + class LazyConnectionFactory implements ConnectionFactory { private final BeanFactory beanFactory; diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectMonoTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectMonoTests.java index 0d59c7d34..3888d3aa0 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectMonoTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/annotation/SleuthSpanCreatorAspectMonoTests.java @@ -20,6 +20,8 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.concurrent.NotThreadSafe; + import brave.Span; import brave.Tracer; import brave.sampler.Sampler; @@ -50,6 +52,7 @@ import static reactor.core.publisher.Mono.just; @SpringBootTest(classes = SleuthSpanCreatorAspectMonoTests.TestConfiguration.class) @RunWith(SpringRunner.class) @DirtiesContext(methodMode = BEFORE_METHOD) +@NotThreadSafe public class SleuthSpanCreatorAspectMonoTests { @Autowired diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java index 28d207ff9..bd4a6d540 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java @@ -69,15 +69,6 @@ public class HystrixAnnotationsIntegrationTests { this.catcher.invokeLogicWrappedInHystrixCommand(); } - private void thenSpanInHystrixThreadIsContinued(final Span span) { - then(span).isNotNull(); - Awaitility.await().atMost(5, SECONDS).untilAsserted(() -> { - then(HystrixAnnotationsIntegrationTests.this.catcher).isNotNull(); - then(span.context().traceId()).isEqualTo( - HystrixAnnotationsIntegrationTests.this.catcher.getTraceId()); - }); - } - private void thenSpanInHystrixThreadIsCreated() { Awaitility.await().atMost(5, SECONDS).untilAsserted(() -> { then(HystrixAnnotationsIntegrationTests.this.catcher.getSpan()).isNotNull(); @@ -113,8 +104,10 @@ public class HystrixAnnotationsIntegrationTests { @HystrixCommand public void invokeLogicWrappedInHystrixCommand() { + System.out.println("FOOO"); this.spanCaughtFromHystrixThread = new AtomicReference<>( this.tracing.tracer().currentSpan()); + System.out.println("aksdhkasd: " + this.spanCaughtFromHystrixThread); } public Long getTraceId() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/JmsTracingConfigurationTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/JmsTracingConfigurationTest.java index 13fe6e1e8..335f1de27 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/JmsTracingConfigurationTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/JmsTracingConfigurationTest.java @@ -27,6 +27,8 @@ import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageListener; +import javax.jms.TopicConnection; +import javax.jms.TopicConnectionFactory; import javax.jms.XAConnection; import javax.jms.XAConnectionFactory; import javax.resource.spi.ResourceAdapter; @@ -110,6 +112,22 @@ public class JmsTracingConfigurationTest { } } + static void checkTopicConnection(AssertableApplicationContext ctx) + throws JMSException { + // Not using try-with-resources as that doesn't exist in JMS 1.1 + TopicConnection con = ctx.getBean(TopicConnectionFactory.class) + .createTopicConnection(); + try { + con.setExceptionListener(exception -> { + }); + assertThat(con.getExceptionListener().getClass().getName()) + .startsWith("brave.jms.TracingExceptionListener"); + } + finally { + con.close(); + } + } + @Test public void tracesConnectionFactory() { this.contextRunner.run(JmsTracingConfigurationTest::checkConnection); @@ -124,6 +142,15 @@ public class JmsTracingConfigurationTest { }); } + @Test + public void tracesTopicConnectionFactories() { + this.contextRunner.withUserConfiguration(XAConfiguration.class).run(ctx -> { + clearSpans(ctx); + checkConnection(ctx); + checkTopicConnection(ctx); + }); + } + @Test public void tracesListener_jmsMessageListener() { this.contextRunner.withUserConfiguration(SimpleJmsListenerConfiguration.class) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java index af6637ced..46d276024 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java @@ -296,8 +296,8 @@ public class TracingChannelInterceptorTest { this.message = this.channel.receive(); assertThat(this.message).isNotNull(); - assertThat(this.message) - .isInstanceOfSatisfying(ErrorMessage.class, errorMessage -> { + assertThat(this.message).isInstanceOfSatisfying(ErrorMessage.class, + errorMessage -> { assertThat(errorMessage.getOriginalMessage()) .isSameAs(originalMessage); assertThat(errorMessage.getHeaders().get("header")) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java index 9a385aa81..f58aa58e1 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java @@ -19,10 +19,11 @@ package org.springframework.cloud.sleuth.instrument.scheduling; import java.util.AbstractMap; import java.util.concurrent.atomic.AtomicBoolean; +import javax.annotation.concurrent.NotThreadSafe; + import brave.Span; import brave.Tracing; import brave.sampler.Sampler; -import net.jcip.annotations.NotThreadSafe; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Before; @@ -185,11 +186,9 @@ class TestBeanWithScheduledMethod { this.tracing = tracing; } - @Scheduled(fixedDelay = 1L) + @Scheduled(fixedDelay = 1000L) public void scheduledMethod() { - log.info("Running the scheduled method"); this.span = this.tracing.tracer().currentSpan(); - log.info("Stored the span " + this.span + " as current span"); this.executed.set(true); } @@ -258,7 +257,7 @@ class TestBeanWithScheduledMethodToBeIgnored { this.tracing = tracing; } - @Scheduled(fixedDelay = 1L) + @Scheduled(fixedDelay = 1000L) public void scheduledMethodToIgnore() { this.span = this.tracing.tracer().currentSpan(); this.executed.set(true); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java index 1e39fd76d..61cf63524 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java @@ -53,11 +53,13 @@ import static org.assertj.core.api.BDDAssertions.then; public class SkipPatternProviderConfigTest { private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(DispatcherServletAutoConfiguration.class, - InfoEndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class, - HealthEndpointAutoConfiguration.class, EndpointAutoConfiguration.class, - WebEndpointAutoConfiguration.class, TraceAutoConfiguration.class, - TraceWebAutoConfiguration.class)); + .withConfiguration(AutoConfigurations.of( + DispatcherServletAutoConfiguration.class, + InfoEndpointAutoConfiguration.class, + HealthIndicatorAutoConfiguration.class, + HealthEndpointAutoConfiguration.class, + EndpointAutoConfiguration.class, WebEndpointAutoConfiguration.class, + TraceAutoConfiguration.class, TraceWebAutoConfiguration.class)); @Test public void should_pick_skip_pattern_from_sleuth_properties() throws Exception { @@ -93,12 +95,13 @@ public class SkipPatternProviderConfigTest { @Test public void should_return_management_context_with_context_path() throws Exception { contextRunner - .withConfiguration(UserConfigurations.of( - ManagementContextAutoConfiguration.class, ServerPropertiesConfig.class)) + .withConfiguration( + UserConfigurations.of(ManagementContextAutoConfiguration.class, + ServerPropertiesConfig.class)) .withPropertyValues("management.server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/actuator/(health|health/.*|info|info/.*)", "foo.*", + "/actuator/(health|health/.*|info|info/.*)", "foo.*", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -116,94 +119,113 @@ public class SkipPatternProviderConfigTest { @Test public void should_return_endpoints_without_context_path() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "/actuator/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_context_path() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) - .withPropertyValues("server.servlet.context-path=foo") - .run(context -> { + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("server.servlet.context-path=foo").run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "foo/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "foo/actuator/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_without_context_path_and_base_path_set_to_root() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.endpoints.web.base-path=/") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_context_path_and_base_path_set_to_root() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.endpoints.web.base-path=/", "server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "foo/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "foo/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_context_path_and_base_path_set_to_root_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.endpoints.web.base-path=/", "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_actuator_context_path_only() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.endpoints.web.base-path=/mgt", "server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "foo/mgt/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "foo/mgt/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_actuator_default_context_path_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) - .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.server.port=0", + "server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "/actuator/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_actuator_context_path_only_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.endpoints.web.base-path=/mgt", "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/mgt/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "/mgt/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @Test public void should_return_endpoints_with_context_path_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) - .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") + contextRunner + .withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.server.port=0", + "server.servlet.context-path=foo") .run(context -> { then(extractAllPatterns(context)).containsExactlyInAnyOrder( - "/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); + "/actuator/(health|health/.*|info|info/.*)", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -224,32 +246,29 @@ public class SkipPatternProviderConfigTest { private SingleSkipPattern bar() { return () -> Optional.of(Pattern.compile("bar")); } - + /** - * Extracts the patterns from pattern provider + * Extracts the patterns from pattern provider */ private String extractPattern(ApplicationContext context) { - SkipPatternProvider skipPatternProvider = context.getBean(SkipPatternProvider.class); + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); return skipPatternProvider.skipPattern().pattern(); } /** - * Extracts all single patterns - */ + * Extracts all single patterns + */ private Collection extractAllPatterns(ApplicationContext context) { - return context - .getBeansOfType(SingleSkipPattern.class) - .values() - .stream() - .map(SingleSkipPattern::skipPattern) - .filter(Optional::isPresent) - .map(Optional::get) - .map(Pattern::pattern) - .collect(Collectors.toList()); + return context.getBeansOfType(SingleSkipPattern.class).values().stream() + .map(SingleSkipPattern::skipPattern).filter(Optional::isPresent) + .map(Optional::get).map(Pattern::pattern).collect(Collectors.toList()); } - + @Configuration @EnableConfigurationProperties(ServerProperties.class) static class ServerPropertiesConfig { + } + } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebFluxTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebFluxTests.java index a1d0ef725..06593c70f 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebFluxTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceWebFluxTests.java @@ -19,6 +19,8 @@ package org.springframework.cloud.sleuth.instrument.web; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.concurrent.NotThreadSafe; + import brave.Span; import brave.Tracer; import brave.sampler.Sampler; @@ -64,6 +66,7 @@ import org.springframework.web.reactive.function.server.ServerResponse; import static org.assertj.core.api.BDDAssertions.then; +@NotThreadSafe public class TraceWebFluxTests { public static final String EXPECTED_TRACE_ID = "b919095138aa4c6e"; diff --git a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/ZipkinDiscoveryClientTests.java b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/ZipkinDiscoveryClientTests.java index d4d66d4c1..edbe4558a 100644 --- a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/ZipkinDiscoveryClientTests.java +++ b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/ZipkinDiscoveryClientTests.java @@ -44,13 +44,14 @@ import static org.assertj.core.api.BDDAssertions.then; @RunWith(SpringRunner.class) @SpringBootTest(classes = ZipkinDiscoveryClientTests.Config.class, properties = { "spring.zipkin.baseUrl=https://zipkin/", "spring.zipkin.sender.type=web" // override - // default - // priority - // which - // picks - // rabbit - // due to - // classpath + // default + // priority + // which + // picks + // rabbit + // due + // to + // classpath }) public class ZipkinDiscoveryClientTests {