diff --git a/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationInstrumentationModule.java b/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationInstrumentationModule.java
index c6c4f3ce79..71af12b47e 100644
--- a/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationInstrumentationModule.java
+++ b/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationInstrumentationModule.java
@@ -24,7 +24,7 @@ import net.bytebuddy.matcher.ElementMatcher;
public class AnnotationInstrumentationModule extends InstrumentationModule {
public AnnotationInstrumentationModule() {
- super("opentelemetry-instrumentation-annotations");
+ super("opentelemetry-instrumentation-annotations", "annotations");
}
@Override
diff --git a/instrumentation/spring/spring-boot-autoconfigure/README.md b/instrumentation/spring/spring-boot-autoconfigure/README.md
index a175ea8e17..6bf64e73f3 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/README.md
+++ b/instrumentation/spring/spring-boot-autoconfigure/README.md
@@ -398,16 +398,16 @@ If an exporter is present in the classpath during runtime and a spring bean of t
##### Enabling/Disabling Features
-| Feature | Property | Default Value | ConditionalOnClass |
-| ---------------- | ----------------------------------- | ------------- | ---------------------- |
-| spring-web | otel.springboot.httpclients.enabled | `true` | RestTemplate |
-| spring-webmvc | otel.springboot.httpclients.enabled | `true` | OncePerRequestFilter |
-| spring-webflux | otel.springboot.httpclients.enabled | `true` | WebClient |
-| @WithSpan | otel.springboot.aspects.enabled | `true` | WithSpan, Aspect |
-| Otlp Exporter | otel.exporter.otlp.enabled | `true` | OtlpGrpcSpanExporter |
-| Jaeger Exporter | otel.exporter.jaeger.enabled | `true` | JaegerGrpcSpanExporter |
-| Zipkin Exporter | otel.exporter.zipkin.enabled | `true` | ZipkinSpanExporter |
-| Logging Exporter | otel.exporter.logging.enabled | `true` | LoggingSpanExporter |
+| Feature | Property | Default Value | ConditionalOnClass |
+|------------------|---------------------------------------------|---------------|------------------------|
+| spring-web | otel.instrumentation.spring-webmvc.enabled | `true` | RestTemplate |
+| spring-webmvc | otel.instrumentation.spring-web.enabled | `true` | OncePerRequestFilter |
+| spring-webflux | otel.instrumentation.spring-webflux.enabled | `true` | WebClient |
+| @WithSpan | otel.instrumentation.annotations.enabled | `true` | WithSpan, Aspect |
+| Otlp Exporter | otel.exporter.otlp.enabled | `true` | OtlpGrpcSpanExporter |
+| Jaeger Exporter | otel.exporter.jaeger.enabled | `true` | JaegerGrpcSpanExporter |
+| Zipkin Exporter | otel.exporter.zipkin.enabled | `true` | ZipkinSpanExporter |
+| Logging Exporter | otel.exporter.logging.enabled | `true` | LoggingSpanExporter |
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectProperties.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectProperties.java
deleted file mode 100644
index 3bd0ffb362..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectProperties.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/** Configuration for enabling tracing aspects. */
-@ConfigurationProperties(prefix = "otel.springboot.aspects")
-public final class TraceAspectProperties {
- private boolean enabled;
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/HttpClientsProperties.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/HttpClientsProperties.java
deleted file mode 100644
index 05d02f0547..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/HttpClientsProperties.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * Configuration for the tracing instrumentation of HTTP clients.
- *
- *
Sets default value of otel.springboot.httpclients.enabled to true if the configuration does
- * not exist in application context.
- */
-@ConfigurationProperties(prefix = "otel.springboot.httpclients")
-public final class HttpClientsProperties {
- private boolean enabled = true;
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateAutoConfiguration.java
deleted file mode 100644
index d6d1e79a10..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateAutoConfiguration.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.resttemplate;
-
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.HttpClientsProperties;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.client.RestTemplate;
-
-/**
- * Configures {@link RestTemplate} for tracing.
- *
- *
Adds Open Telemetry instrumentation to RestTemplate beans after initialization
- */
-@Configuration
-@ConditionalOnClass(RestTemplate.class)
-@EnableConfigurationProperties(HttpClientsProperties.class)
-@ConditionalOnProperty(
- prefix = "otel.springboot.httpclients",
- name = "enabled",
- matchIfMissing = true)
-public class RestTemplateAutoConfiguration {
-
- @Bean
- public RestTemplateBeanPostProcessor otelRestTemplateBeanPostProcessor(
- ObjectProvider openTelemetryProvider) {
- return new RestTemplateBeanPostProcessor(openTelemetryProvider);
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientAutoConfiguration.java
deleted file mode 100644
index 3497aae7a1..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientAutoConfiguration.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.webclient;
-
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.HttpClientsProperties;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.reactive.function.client.WebClient;
-
-/**
- * Configures {@link WebClient} for tracing.
- *
- * Adds Open Telemetry instrumentation to WebClient beans after initialization
- */
-@Configuration
-@ConditionalOnClass(WebClient.class)
-@EnableConfigurationProperties(HttpClientsProperties.class)
-@ConditionalOnProperty(
- prefix = "otel.springboot.httpclients",
- name = "enabled",
- matchIfMissing = true)
-public class WebClientAutoConfiguration {
-
- @Bean
- public WebClientBeanPostProcessor otelWebClientBeanPostProcessor(
- ObjectProvider openTelemetryProvider) {
- return new WebClientBeanPostProcessor(openTelemetryProvider);
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java
similarity index 73%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectAutoConfiguration.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java
index 2f568eebe7..2d69b24eea 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectAutoConfiguration.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfiguration.java
@@ -3,36 +3,36 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.annotations.WithSpan;
import org.aspectj.lang.annotation.Aspect;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
/** Configures {@link WithSpanAspect} to trace bean methods annotated with {@link WithSpan}. */
-@Configuration
-@EnableConfigurationProperties(TraceAspectProperties.class)
-@ConditionalOnProperty(prefix = "otel.springboot.aspects", name = "enabled", matchIfMissing = true)
+@ConditionalOnBean(OpenTelemetry.class)
@ConditionalOnClass(Aspect.class)
-public class TraceAspectAutoConfiguration {
+@ConditionalOnProperty(name = "otel.instrumentation.annotations.enabled", matchIfMissing = true)
+@Configuration
+public class InstrumentationAnnotationsAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public ParameterNameDiscoverer parameterNameDiscoverer() {
+ ParameterNameDiscoverer parameterNameDiscoverer() {
return new DefaultParameterNameDiscoverer();
}
@Bean
@ConditionalOnClass(WithSpan.class)
- public InstrumentationWithSpanAspect instrumentationWithSpanAspect(
+ InstrumentationWithSpanAspect otelInstrumentationWithSpanAspect(
OpenTelemetry openTelemetry, ParameterNameDiscoverer parameterNameDiscoverer) {
return new InstrumentationWithSpanAspect(openTelemetry, parameterNameDiscoverer);
}
@@ -40,7 +40,7 @@ public class TraceAspectAutoConfiguration {
@Bean
@SuppressWarnings("deprecation") // instrumenting deprecated class for backwards compatibility
@ConditionalOnClass(io.opentelemetry.extension.annotations.WithSpan.class)
- public SdkExtensionWithSpanAspect sdkExtensionWithSpanAspect(
+ SdkExtensionWithSpanAspect otelSdkExtensionWithSpanAspect(
OpenTelemetry openTelemetry, ParameterNameDiscoverer parameterNameDiscoverer) {
return new SdkExtensionWithSpanAspect(openTelemetry, parameterNameDiscoverer);
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/InstrumentationWithSpanAspect.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspect.java
similarity index 91%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/InstrumentationWithSpanAspect.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspect.java
index 568f55e22e..5cf80fce7e 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/InstrumentationWithSpanAspect.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspect.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.api.OpenTelemetry;
import org.aspectj.lang.ProceedingJoinPoint;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/JoinPointRequest.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JoinPointRequest.java
similarity index 97%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/JoinPointRequest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JoinPointRequest.java
index 986e8d207d..db4d9cf483 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/JoinPointRequest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JoinPointRequest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.instrumentation.annotations.WithSpan;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/JointPointCodeAttributesExtractor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JointPointCodeAttributesExtractor.java
similarity index 85%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/JointPointCodeAttributesExtractor.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JointPointCodeAttributesExtractor.java
index 032325515c..e82c7f41b1 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/JointPointCodeAttributesExtractor.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/JointPointCodeAttributesExtractor.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesGetter;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/SdkExtensionWithSpanAspect.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/SdkExtensionWithSpanAspect.java
similarity index 91%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/SdkExtensionWithSpanAspect.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/SdkExtensionWithSpanAspect.java
index 5b6db318f5..5ba610bf89 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/SdkExtensionWithSpanAspect.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/SdkExtensionWithSpanAspect.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.api.OpenTelemetry;
import org.aspectj.lang.ProceedingJoinPoint;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspect.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspect.java
similarity index 97%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspect.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspect.java
index bd508c212c..ed2d0c4ab1 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspect.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspect.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Span;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectParameterAttributeNamesExtractor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java
similarity index 97%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectParameterAttributeNamesExtractor.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java
index 12cc1b99f7..37f859749c 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectParameterAttributeNamesExtractor.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/WithSpanAspectParameterAttributeNamesExtractor.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import io.opentelemetry.instrumentation.annotations.SpanAttribute;
import io.opentelemetry.instrumentation.api.annotation.support.ParameterAttributeNamesExtractor;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java
similarity index 93%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java
index 4a39a5d296..0987475db2 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.kafka;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java
similarity index 68%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaInstrumentationAutoConfiguration.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java
index 878828f5fa..c34686f6d4 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaInstrumentationAutoConfiguration.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java
@@ -3,35 +3,35 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.kafka;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.kafkaclients.v2_6.KafkaTelemetry;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.kafka.DefaultKafkaProducerFactoryCustomizer;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.KafkaTemplate;
-@Configuration
-@EnableConfigurationProperties(KafkaInstrumentationProperties.class)
-@ConditionalOnProperty(name = "otel.springboot.kafka.enabled", matchIfMissing = true)
+@ConditionalOnBean(OpenTelemetry.class)
@ConditionalOnClass({KafkaTemplate.class, ConcurrentKafkaListenerContainerFactory.class})
+@ConditionalOnProperty(name = "otel.instrumentation.kafka.enabled", matchIfMissing = true)
+@Configuration
public class KafkaInstrumentationAutoConfiguration {
@Bean
- public DefaultKafkaProducerFactoryCustomizer producerInstrumentation(
+ DefaultKafkaProducerFactoryCustomizer otelKafkaProducerFactoryCustomizer(
OpenTelemetry openTelemetry) {
KafkaTelemetry kafkaTelemetry = KafkaTelemetry.create(openTelemetry);
return producerFactory -> producerFactory.addPostProcessor(kafkaTelemetry::wrap);
}
@Bean
- public ConcurrentKafkaListenerContainerFactoryPostProcessor
- concurrentKafkaListenerContainerFactoryPostProcessor(OpenTelemetry openTelemetry) {
+ ConcurrentKafkaListenerContainerFactoryPostProcessor
+ otelKafkaListenerContainerFactoryBeanPostProcessor(OpenTelemetry openTelemetry) {
return new ConcurrentKafkaListenerContainerFactoryPostProcessor(openTelemetry);
}
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/logging/OpenTelemetryAppenderAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java
similarity index 77%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/logging/OpenTelemetryAppenderAutoConfiguration.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java
index 25763fbabf..76bff6e397 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/logging/OpenTelemetryAppenderAutoConfiguration.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/OpenTelemetryAppenderAutoConfiguration.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.logging;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging;
import io.opentelemetry.api.OpenTelemetry;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -14,19 +14,16 @@ import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+@ConditionalOnBean(OpenTelemetry.class)
@Configuration
@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
-@ConditionalOnBean(OpenTelemetry.class)
public class OpenTelemetryAppenderAutoConfiguration {
- @Configuration
+ @ConditionalOnClass(org.apache.logging.log4j.core.LoggerContext.class)
@ConditionalOnProperty(
- prefix = "otel.springboot.log4j-appender",
- name = "enabled",
+ name = "otel.instrumentation.log4j-appender.enabled",
matchIfMissing = true)
- @ConditionalOnClass({
- io.opentelemetry.instrumentation.log4j.appender.v2_17.OpenTelemetryAppender.class
- })
+ @Configuration
static class Log4jAppenderConfig {
@Bean
@@ -39,14 +36,11 @@ public class OpenTelemetryAppenderAutoConfiguration {
}
}
- @Configuration
+ @ConditionalOnClass(ch.qos.logback.classic.LoggerContext.class)
@ConditionalOnProperty(
- prefix = "otel.springboot.logback-appender",
- name = "enabled",
+ name = "otel.instrumentation.logback-appender.enabled",
matchIfMissing = true)
- @ConditionalOnClass({
- io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender.class
- })
+ @Configuration
static class LogbackAppenderConfig {
@Bean
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java
similarity index 72%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimAutoConfiguration.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java
index ef08bcee06..ed9e9beb84 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimAutoConfiguration.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfiguration.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.metrics;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer;
import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.MeterRegistry;
@@ -16,21 +16,19 @@ import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-@Configuration
-@EnableConfigurationProperties(MicrometerShimProperties.class)
-@ConditionalOnProperty(name = "otel.springboot.micrometer.enabled", matchIfMissing = true)
@AutoConfigureAfter(MetricsAutoConfiguration.class)
@AutoConfigureBefore(CompositeMeterRegistryAutoConfiguration.class)
-@ConditionalOnBean(Clock.class)
+@ConditionalOnBean({Clock.class, OpenTelemetry.class})
@ConditionalOnClass(MeterRegistry.class)
-public class MicrometerShimAutoConfiguration {
+@ConditionalOnProperty(name = "otel.instrumentation.micrometer.enabled", matchIfMissing = true)
+@Configuration
+public class MicrometerBridgeAutoConfiguration {
@Bean
- public MeterRegistry micrometerShim(OpenTelemetry openTelemetry, Clock micrometerClock) {
+ MeterRegistry otelMeterRegistry(OpenTelemetry openTelemetry, Clock micrometerClock) {
return OpenTelemetryMeterRegistry.builder(openTelemetry).setClock(micrometerClock).build();
}
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessor.java
similarity index 65%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateBeanPostProcessor.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessor.java
index 9140c0987e..c8f213f241 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateBeanPostProcessor.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessor.java
@@ -3,21 +3,21 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.resttemplate;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry;
import java.util.List;
-import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.web.client.RestTemplate;
final class RestTemplateBeanPostProcessor implements BeanPostProcessor {
- private final ObjectProvider openTelemetryProvider;
- RestTemplateBeanPostProcessor(ObjectProvider openTelemetryProvider) {
- this.openTelemetryProvider = openTelemetryProvider;
+ private final OpenTelemetry openTelemetry;
+
+ RestTemplateBeanPostProcessor(OpenTelemetry openTelemetry) {
+ this.openTelemetry = openTelemetry;
}
@Override
@@ -27,12 +27,9 @@ final class RestTemplateBeanPostProcessor implements BeanPostProcessor {
}
RestTemplate restTemplate = (RestTemplate) bean;
- OpenTelemetry openTelemetry = openTelemetryProvider.getIfUnique();
- if (openTelemetry != null) {
- ClientHttpRequestInterceptor interceptor =
- SpringWebTelemetry.create(openTelemetry).newInterceptor();
- addRestTemplateInterceptorIfNotPresent(restTemplate, interceptor);
- }
+ ClientHttpRequestInterceptor interceptor =
+ SpringWebTelemetry.create(openTelemetry).newInterceptor();
+ addRestTemplateInterceptorIfNotPresent(restTemplate, interceptor);
return restTemplate;
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java
new file mode 100644
index 0000000000..491af6b51e
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
+
+import io.opentelemetry.api.OpenTelemetry;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * Configures {@link RestTemplate} for tracing.
+ *
+ * Adds Open Telemetry instrumentation to RestTemplate beans after initialization
+ */
+@ConditionalOnBean(OpenTelemetry.class)
+@ConditionalOnClass(RestTemplate.class)
+@ConditionalOnProperty(name = "otel.instrumentation.spring-web.enabled", matchIfMissing = true)
+@Configuration
+public class SpringWebInstrumentationAutoConfiguration {
+
+ @Bean
+ RestTemplateBeanPostProcessor otelRestTemplateBeanPostProcessor(OpenTelemetry openTelemetry) {
+ return new RestTemplateBeanPostProcessor(openTelemetry);
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java
new file mode 100644
index 0000000000..249b8a7906
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux;
+
+import io.opentelemetry.api.OpenTelemetry;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.reactive.function.client.WebClient;
+
+/**
+ * Configures {@link WebClient} for tracing.
+ *
+ *
Adds Open Telemetry instrumentation to WebClient beans after initialization
+ */
+@ConditionalOnBean(OpenTelemetry.class)
+@ConditionalOnClass(WebClient.class)
+@ConditionalOnProperty(name = "otel.instrumentation.spring-webflux.enabled", matchIfMissing = true)
+@Configuration
+public class SpringWebfluxInstrumentationAutoConfiguration {
+
+ @Bean
+ WebClientBeanPostProcessor otelWebClientBeanPostProcessor(OpenTelemetry openTelemetry) {
+ return new WebClientBeanPostProcessor(openTelemetry);
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessor.java
similarity index 51%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientBeanPostProcessor.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessor.java
index cbcd7f9450..b066045750 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientBeanPostProcessor.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessor.java
@@ -3,11 +3,10 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.webclient;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetry;
-import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.web.reactive.function.client.WebClient;
@@ -18,33 +17,26 @@ import org.springframework.web.reactive.function.client.WebClient;
*/
final class WebClientBeanPostProcessor implements BeanPostProcessor {
- private final ObjectProvider openTelemetryProvider;
+ private final OpenTelemetry openTelemetry;
- WebClientBeanPostProcessor(ObjectProvider openTelemetryProvider) {
- this.openTelemetryProvider = openTelemetryProvider;
+ WebClientBeanPostProcessor(OpenTelemetry openTelemetry) {
+ this.openTelemetry = openTelemetry;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
if (bean instanceof WebClient) {
WebClient webClient = (WebClient) bean;
- return wrapBuilder(openTelemetryProvider, webClient.mutate()).build();
+ return wrapBuilder(webClient.mutate()).build();
} else if (bean instanceof WebClient.Builder) {
WebClient.Builder webClientBuilder = (WebClient.Builder) bean;
- return wrapBuilder(openTelemetryProvider, webClientBuilder);
+ return wrapBuilder(webClientBuilder);
}
return bean;
}
- private static WebClient.Builder wrapBuilder(
- ObjectProvider openTelemetryProvider, WebClient.Builder webClientBuilder) {
-
- OpenTelemetry openTelemetry = openTelemetryProvider.getIfUnique();
- if (openTelemetry != null) {
- SpringWebfluxTelemetry instrumentation = SpringWebfluxTelemetry.create(openTelemetry);
- return webClientBuilder.filters(instrumentation::addClientTracingFilter);
- } else {
- return webClientBuilder;
- }
+ private WebClient.Builder wrapBuilder(WebClient.Builder webClientBuilder) {
+ SpringWebfluxTelemetry instrumentation = SpringWebfluxTelemetry.create(openTelemetry);
+ return webClientBuilder.filters(instrumentation::addClientTracingFilter);
}
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java
similarity index 65%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfiguration.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java
index 3b8f0af52b..6405793df4 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfiguration.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.webmvc;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry;
@@ -11,22 +11,20 @@ import javax.servlet.Filter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.servlet.DispatcherServlet;
-/** Configures {@link SpringWebMvcTelemetry} for tracing. */
-@Configuration
-@EnableConfigurationProperties(WebMvcProperties.class)
-@ConditionalOnProperty(prefix = "otel.springboot.web", name = "enabled", matchIfMissing = true)
-@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
@ConditionalOnBean(OpenTelemetry.class)
-public class WebMvcFilterAutoConfiguration {
+@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
+@ConditionalOnProperty(name = "otel.instrumentation.spring-webmvc.enabled", matchIfMissing = true)
+@Configuration
+@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
+public class SpringWebMvc5InstrumentationAutoConfiguration {
@Bean
- public Filter otelWebMvcInstrumentationFilter(OpenTelemetry openTelemetry) {
+ Filter otelWebMvcFilter(OpenTelemetry openTelemetry) {
return SpringWebMvcTelemetry.create(openTelemetry).createServletFilter();
}
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationSpring6.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java
similarity index 65%
rename from instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationSpring6.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java
index 0eec311f67..0ab121ffe2 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationSpring6.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.webmvc;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry;
@@ -11,22 +11,20 @@ import jakarta.servlet.Filter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.servlet.DispatcherServlet;
-/** Configures {@link SpringWebMvcTelemetry} for tracing. */
-@Configuration
-@EnableConfigurationProperties(WebMvcProperties.class)
-@ConditionalOnProperty(prefix = "otel.springboot.web", name = "enabled", matchIfMissing = true)
-@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
@ConditionalOnBean(OpenTelemetry.class)
-public class WebMvcFilterAutoConfigurationSpring6 {
+@ConditionalOnClass({Filter.class, OncePerRequestFilter.class, DispatcherServlet.class})
+@ConditionalOnProperty(name = "otel.instrumentation.spring-webmvc.enabled", matchIfMissing = true)
+@Configuration
+@SuppressWarnings("OtelPrivateConstructorForUtilityClass")
+public class SpringWebMvc6InstrumentationAutoConfiguration {
@Bean
- public Filter otelWebMvcInstrumentationFilter(OpenTelemetry openTelemetry) {
+ Filter otelWebMvcFilter(OpenTelemetry openTelemetry) {
return SpringWebMvcTelemetry.create(openTelemetry).createServletFilter();
}
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaInstrumentationProperties.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaInstrumentationProperties.java
deleted file mode 100644
index 73eac23125..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaInstrumentationProperties.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.kafka;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@ConfigurationProperties(prefix = "otel.springboot.kafka")
-public class KafkaInstrumentationProperties {
-
- private boolean enabled = true;
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimProperties.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimProperties.java
deleted file mode 100644
index 60e55d20b3..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimProperties.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.metrics;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@ConfigurationProperties(prefix = "otel.springboot.micrometer")
-public class MicrometerShimProperties {
-
- private boolean enabled = true;
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcProperties.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcProperties.java
deleted file mode 100644
index 8b7df171c5..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcProperties.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.webmvc;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * Configuration for the tracing instrumentation of Spring WebMVC
- *
- * Sets default value of otel.springboot.web.enabled to true if the configuration does not exist
- * in application context
- */
-@ConfigurationProperties(prefix = "otel.springboot.web")
-public final class WebMvcProperties {
- private boolean enabled = true;
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
index 1f42548a23..887ab1cfc2 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -1,17 +1,17 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.aspects.TraceAspectAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.jaeger.JaegerSpanExporterAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.logging.LoggingSpanExporterAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpMetricExporterAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpSpanExporterAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpLoggerExporterAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.zipkin.ZipkinSpanExporterAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.resttemplate.RestTemplateAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.webclient.WebClientAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.kafka.KafkaInstrumentationAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.logging.OpenTelemetryAppenderAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.metrics.MicrometerShimAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration,\
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc.SpringWebMvc5InstrumentationAutoConfiguration,\
io.opentelemetry.instrumentation.spring.autoconfigure.propagators.PropagationAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.resources.OtelResourceAutoConfiguration,\
-io.opentelemetry.instrumentation.spring.autoconfigure.webmvc.WebMvcFilterAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.resources.OtelResourceAutoConfiguration
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 86874a6f70..5f7c5e05d0 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,16 +1,16 @@
io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.aspects.TraceAspectAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.jaeger.JaegerSpanExporterAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.logging.LoggingSpanExporterAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpLoggerExporterAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpMetricExporterAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpSpanExporterAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpLoggerExporterAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.exporters.zipkin.ZipkinSpanExporterAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.resttemplate.RestTemplateAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.webclient.WebClientAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.kafka.KafkaInstrumentationAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.logging.OpenTelemetryAppenderAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.metrics.MicrometerShimAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations.InstrumentationAnnotationsAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka.KafkaInstrumentationAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging.OpenTelemetryAppenderAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer.MicrometerBridgeAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web.SpringWebInstrumentationAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux.SpringWebfluxInstrumentationAutoConfiguration
+io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc.SpringWebMvc6InstrumentationAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.propagators.PropagationAutoConfiguration
io.opentelemetry.instrumentation.spring.autoconfigure.resources.OtelResourceAutoConfiguration
-io.opentelemetry.instrumentation.spring.autoconfigure.webmvc.WebMvcFilterAutoConfigurationSpring6
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectAutoConfigurationTest.java
deleted file mode 100644
index 3dc05203bf..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/TraceAspectAutoConfigurationTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.autoconfigure.AutoConfigurations;
-import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-
-/** Spring Boot auto configuration test for {@link TraceAspectAutoConfiguration}. */
-public class TraceAspectAutoConfigurationTest {
-
- private final ApplicationContextRunner contextRunner =
- new ApplicationContextRunner()
- .withConfiguration(
- AutoConfigurations.of(
- OpenTelemetryAutoConfiguration.class, TraceAspectAutoConfiguration.class));
-
- @Test
- @DisplayName("when aspects are ENABLED should initialize WithSpanAspect bean")
- void aspectsEnabled() {
- this.contextRunner
- .withPropertyValues("otel.springboot.aspects.enabled=true")
- .run(
- context ->
- assertThat(context)
- .hasBean("instrumentationWithSpanAspect")
- .hasBean("sdkExtensionWithSpanAspect"));
- }
-
- @Test
- @DisplayName("when aspects are DISABLED should NOT initialize WithSpanAspect bean")
- void disabledProperty() {
- this.contextRunner
- .withPropertyValues("otel.springboot.aspects.enabled=false")
- .run(
- context ->
- assertThat(context)
- .doesNotHaveBean("instrumentationWithSpanAspect")
- .doesNotHaveBean("sdkExtensionWithSpanAspect"));
- }
-
- @Test
- @DisplayName("when aspects enabled property is MISSING should initialize WithSpanAspect bean")
- void noProperty() {
- this.contextRunner.run(
- context ->
- assertThat(context)
- .hasBean("instrumentationWithSpanAspect")
- .hasBean("sdkExtensionWithSpanAspect"));
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateBeanPostProcessorTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateBeanPostProcessorTest.java
deleted file mode 100644
index eb2144e1e3..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateBeanPostProcessorTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.resttemplate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoInteractions;
-import static org.mockito.Mockito.when;
-
-import io.opentelemetry.api.OpenTelemetry;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.http.client.ClientHttpRequestInterceptor;
-import org.springframework.web.client.RestTemplate;
-
-@ExtendWith(MockitoExtension.class)
-class RestTemplateBeanPostProcessorTest {
-
- @Mock ObjectProvider openTelemetryProvider;
-
- RestTemplateBeanPostProcessor restTemplateBeanPostProcessor;
-
- @BeforeEach
- void setUp() {
- restTemplateBeanPostProcessor = new RestTemplateBeanPostProcessor(openTelemetryProvider);
- }
-
- @Test
- @DisplayName("when processed bean is not of type RestTemplate should return object")
- void returnsObject() {
- assertThat(
- restTemplateBeanPostProcessor.postProcessAfterInitialization(
- new Object(), "testObject"))
- .isExactlyInstanceOf(Object.class);
-
- verifyNoInteractions(openTelemetryProvider);
- }
-
- @Test
- @DisplayName("when processed bean is of type RestTemplate should return RestTemplate")
- void returnsRestTemplate() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(OpenTelemetry.noop());
-
- assertThat(
- restTemplateBeanPostProcessor.postProcessAfterInitialization(
- new RestTemplate(), "testRestTemplate"))
- .isInstanceOf(RestTemplate.class);
-
- verify(openTelemetryProvider).getIfUnique();
- }
-
- @Test
- @DisplayName("when processed bean is of type RestTemplate should add ONE RestTemplateInterceptor")
- void addsRestTemplateInterceptor() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(OpenTelemetry.noop());
-
- RestTemplate restTemplate = new RestTemplate();
-
- restTemplateBeanPostProcessor.postProcessAfterInitialization(restTemplate, "testRestTemplate");
- restTemplateBeanPostProcessor.postProcessAfterInitialization(restTemplate, "testRestTemplate");
- restTemplateBeanPostProcessor.postProcessAfterInitialization(restTemplate, "testRestTemplate");
-
- assertThat(
- restTemplate.getInterceptors().stream()
- .filter(RestTemplateBeanPostProcessorTest::isOtelInstrumentationInterceptor)
- .count())
- .isEqualTo(1);
-
- verify(openTelemetryProvider, times(3)).getIfUnique();
- }
-
- @Test
- @DisplayName("when OpenTelemetry is not available should NOT add RestTemplateInterceptor")
- void doesNotAddRestTemplateInterceptorIfOpenTelemetryUnavailable() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(null);
- RestTemplate restTemplate = new RestTemplate();
-
- restTemplateBeanPostProcessor.postProcessAfterInitialization(restTemplate, "testRestTemplate");
- restTemplateBeanPostProcessor.postProcessAfterInitialization(restTemplate, "testRestTemplate");
- restTemplateBeanPostProcessor.postProcessAfterInitialization(restTemplate, "testRestTemplate");
-
- assertThat(
- restTemplate.getInterceptors().stream()
- .filter(RestTemplateBeanPostProcessorTest::isOtelInstrumentationInterceptor)
- .count())
- .isEqualTo(0);
-
- verify(openTelemetryProvider, times(3)).getIfUnique();
- }
-
- private static boolean isOtelInstrumentationInterceptor(ClientHttpRequestInterceptor rti) {
- return rti.getClass().getName().startsWith("io.opentelemetry.instrumentation");
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientAutoConfigurationTest.java
deleted file mode 100644
index ea90e21901..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientAutoConfigurationTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.webclient;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.autoconfigure.AutoConfigurations;
-import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-
-/** Spring Boot auto configuration test for {@link WebClientAutoConfiguration}. */
-class WebClientAutoConfigurationTest {
-
- private final ApplicationContextRunner contextRunner =
- new ApplicationContextRunner()
- .withConfiguration(
- AutoConfigurations.of(
- OpenTelemetryAutoConfiguration.class, WebClientAutoConfiguration.class));
-
- @Test
- @DisplayName("when httpclients are ENABLED should initialize WebClientBeanPostProcessor bean")
- void httpClientsEnabled() {
- this.contextRunner
- .withPropertyValues("otel.springboot.httpclients.enabled=true")
- .run(
- context ->
- assertThat(
- context.getBean(
- "otelWebClientBeanPostProcessor", WebClientBeanPostProcessor.class))
- .isNotNull());
- }
-
- @Test
- @DisplayName(
- "when httpclients are DISABLED should NOT initialize WebClientBeanPostProcessor bean")
- void disabledProperty() {
- this.contextRunner
- .withPropertyValues("otel.springboot.httpclients.enabled=false")
- .run(
- context ->
- assertThat(context.containsBean("otelWebClientBeanPostProcessor")).isFalse());
- }
-
- @Test
- @DisplayName(
- "when httpclients enabled property is MISSING should initialize WebClientBeanPostProcessor bean")
- void noProperty() {
- this.contextRunner.run(
- context ->
- assertThat(
- context.getBean(
- "otelWebClientBeanPostProcessor", WebClientBeanPostProcessor.class))
- .isNotNull());
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientBeanPostProcessorTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientBeanPostProcessorTest.java
deleted file mode 100644
index 79d71cca8d..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/webclient/WebClientBeanPostProcessorTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.webclient;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoInteractions;
-import static org.mockito.Mockito.when;
-
-import io.opentelemetry.api.OpenTelemetry;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
-import org.springframework.web.reactive.function.client.WebClient;
-
-@ExtendWith(MockitoExtension.class)
-class WebClientBeanPostProcessorTest {
-
- @Mock ObjectProvider openTelemetryProvider;
-
- WebClientBeanPostProcessor webClientBeanPostProcessor;
-
- @BeforeEach
- void setUp() {
- webClientBeanPostProcessor = new WebClientBeanPostProcessor(openTelemetryProvider);
- }
-
- @Test
- @DisplayName(
- "when processed bean is NOT of type WebClient or WebClientBuilder should return Object")
- void returnsObject() {
-
- assertThat(
- webClientBeanPostProcessor.postProcessAfterInitialization(new Object(), "testObject"))
- .isExactlyInstanceOf(Object.class);
-
- verifyNoInteractions(openTelemetryProvider);
- }
-
- @Test
- @DisplayName("when processed bean is of type WebClient should return WebClient")
- void returnsWebClient() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(OpenTelemetry.noop());
-
- assertThat(
- webClientBeanPostProcessor.postProcessAfterInitialization(
- WebClient.create(), "testWebClient"))
- .isInstanceOf(WebClient.class);
-
- verify(openTelemetryProvider).getIfUnique();
- }
-
- @Test
- @DisplayName("when processed bean is of type WebClientBuilder should return WebClientBuilder")
- void returnsWebClientBuilder() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(OpenTelemetry.noop());
-
- assertThat(
- webClientBeanPostProcessor.postProcessAfterInitialization(
- WebClient.builder(), "testWebClientBuilder"))
- .isInstanceOf(WebClient.Builder.class);
-
- verify(openTelemetryProvider).getIfUnique();
- }
-
- @Test
- @DisplayName("when processed bean is of type WebClient should add exchange filter to WebClient")
- void addsExchangeFilterWebClient() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(OpenTelemetry.noop());
-
- WebClient webClient = WebClient.create();
- Object processedWebClient =
- webClientBeanPostProcessor.postProcessAfterInitialization(webClient, "testWebClient");
-
- assertThat(processedWebClient).isInstanceOf(WebClient.class);
- ((WebClient) processedWebClient)
- .mutate()
- .filters(
- functions ->
- assertThat(functions.stream().filter(wctf -> isOtelExchangeFilter(wctf)).count())
- .isEqualTo(1));
-
- verify(openTelemetryProvider).getIfUnique();
- }
-
- @Test
- @DisplayName(
- "when processed bean is of type WebClient and OpenTelemetry is not available should NOT add exchange filter to WebClient")
- void doesNotAddExchangeFilterWebClientIfOpenTelemetryUnavailable() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(null);
-
- WebClient webClient = WebClient.create();
- Object processedWebClient =
- webClientBeanPostProcessor.postProcessAfterInitialization(webClient, "testWebClient");
-
- assertThat(processedWebClient).isInstanceOf(WebClient.class);
- ((WebClient) processedWebClient)
- .mutate()
- .filters(
- functions ->
- assertThat(functions.stream().filter(wctf -> isOtelExchangeFilter(wctf)).count())
- .isEqualTo(0));
-
- verify(openTelemetryProvider).getIfUnique();
- }
-
- @Test
- @DisplayName(
- "when processed bean is of type WebClientBuilder should add ONE exchange filter to WebClientBuilder")
- void addsExchangeFilterWebClientBuilder() {
- when(openTelemetryProvider.getIfUnique()).thenReturn(OpenTelemetry.noop());
-
- WebClient.Builder webClientBuilder = WebClient.builder();
- webClientBeanPostProcessor.postProcessAfterInitialization(
- webClientBuilder, "testWebClientBuilder");
- webClientBeanPostProcessor.postProcessAfterInitialization(
- webClientBuilder, "testWebClientBuilder");
- webClientBeanPostProcessor.postProcessAfterInitialization(
- webClientBuilder, "testWebClientBuilder");
-
- webClientBuilder.filters(
- functions ->
- assertThat(functions.stream().filter(wctf -> isOtelExchangeFilter(wctf)).count())
- .isEqualTo(1));
-
- verify(openTelemetryProvider, times(3)).getIfUnique();
- }
-
- private static boolean isOtelExchangeFilter(ExchangeFilterFunction wctf) {
- return wctf.getClass().getName().startsWith("io.opentelemetry.instrumentation");
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/AbstractWithSpanAspectTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/AbstractWithSpanAspectTest.java
similarity index 99%
rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/AbstractWithSpanAspectTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/AbstractWithSpanAspectTest.java
index 614daf2fe2..26bed0a120 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/AbstractWithSpanAspectTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/AbstractWithSpanAspectTest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import static io.opentelemetry.api.common.AttributeKey.stringKey;
import static io.opentelemetry.api.trace.SpanKind.CLIENT;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java
new file mode 100644
index 0000000000..a00c058ddb
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationAnnotationsAutoConfigurationTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import io.opentelemetry.api.OpenTelemetry;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+class InstrumentationAnnotationsAutoConfigurationTest {
+
+ private final ApplicationContextRunner contextRunner =
+ new ApplicationContextRunner()
+ .withBean(OpenTelemetry.class, OpenTelemetry::noop)
+ .withConfiguration(
+ AutoConfigurations.of(InstrumentationAnnotationsAutoConfiguration.class));
+
+ @Test
+ void instrumentationEnabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.annotations.enabled=true")
+ .run(
+ context ->
+ assertThat(context)
+ .hasBean("otelInstrumentationWithSpanAspect")
+ .hasBean("otelSdkExtensionWithSpanAspect"));
+ }
+
+ @Test
+ void instrumentationDisabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.annotations.enabled=false")
+ .run(
+ context ->
+ assertThat(context)
+ .doesNotHaveBean("otelInstrumentationWithSpanAspect")
+ .doesNotHaveBean("otelSdkExtensionWithSpanAspect"));
+ }
+
+ @Test
+ void defaultConfiguration() {
+ contextRunner.run(
+ context ->
+ assertThat(context)
+ .hasBean("otelInstrumentationWithSpanAspect")
+ .hasBean("otelSdkExtensionWithSpanAspect"));
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/InstrumentationWithSpanAspectTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspectTest.java
similarity index 96%
rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/InstrumentationWithSpanAspectTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspectTest.java
index 25e61b7222..108e82af50 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/InstrumentationWithSpanAspectTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/InstrumentationWithSpanAspectTest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import static io.opentelemetry.api.trace.SpanKind.CLIENT;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/SdkExtensionWithSpanAspectTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/SdkExtensionWithSpanAspectTest.java
similarity index 96%
rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/SdkExtensionWithSpanAspectTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/SdkExtensionWithSpanAspectTest.java
index 4e8a8f63f7..dc9bd2f990 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/SdkExtensionWithSpanAspectTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/annotations/SdkExtensionWithSpanAspectTest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.aspects;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.annotations;
import static io.opentelemetry.api.trace.SpanKind.CLIENT;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaIntegrationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaIntegrationTest.java
similarity index 98%
rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaIntegrationTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaIntegrationTest.java
index e224d0dfae..273ad0cc98 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/kafka/KafkaIntegrationTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaIntegrationTest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.kafka;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.kafka;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java
similarity index 59%
rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimAutoConfigurationTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java
index 7e66044cd0..c6ece5ce32 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/metrics/MicrometerShimAutoConfigurationTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/micrometer/MicrometerBridgeAutoConfigurationTest.java
@@ -3,34 +3,33 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.metrics;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.micrometer;
import static org.assertj.core.api.Assertions.assertThat;
import io.micrometer.core.instrument.MeterRegistry;
+import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry;
-import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
import org.junit.jupiter.api.Test;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-class MicrometerShimAutoConfigurationTest {
+class MicrometerBridgeAutoConfigurationTest {
private final ApplicationContextRunner runner =
new ApplicationContextRunner()
- .withConfiguration(
- AutoConfigurations.of(
- OpenTelemetryAutoConfiguration.class, MicrometerShimAutoConfiguration.class));
+ .withBean(OpenTelemetry.class, OpenTelemetry::noop)
+ .withConfiguration(AutoConfigurations.of(MicrometerBridgeAutoConfiguration.class));
@Test
void metricsEnabled() {
runner
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
- .withPropertyValues("otel.springboot.micrometer.enabled = true")
+ .withPropertyValues("otel.instrumentation.micrometer.enabled = true")
.run(
context ->
- assertThat(context.getBean("micrometerShim", MeterRegistry.class))
+ assertThat(context.getBean("otelMeterRegistry", MeterRegistry.class))
.isNotNull()
.isInstanceOf(OpenTelemetryMeterRegistry.class));
}
@@ -41,7 +40,7 @@ class MicrometerShimAutoConfigurationTest {
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
.run(
context ->
- assertThat(context.getBean("micrometerShim", MeterRegistry.class))
+ assertThat(context.getBean("otelMeterRegistry", MeterRegistry.class))
.isNotNull()
.isInstanceOf(OpenTelemetryMeterRegistry.class));
}
@@ -50,14 +49,14 @@ class MicrometerShimAutoConfigurationTest {
void metricsDisabled() {
runner
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
- .withPropertyValues("otel.springboot.micrometer.enabled = false")
- .run(context -> assertThat(context.containsBean("micrometerShim")).isFalse());
+ .withPropertyValues("otel.instrumentation.micrometer.enabled = false")
+ .run(context -> assertThat(context.containsBean("otelMeterRegistry")).isFalse());
}
@Test
void noActuatorAutoConfiguration() {
runner
- .withPropertyValues("otel.springboot.micrometer.enabled = true")
- .run(context -> assertThat(context.containsBean("micrometerShim")).isFalse());
+ .withPropertyValues("otel.instrumentation.micrometer.enabled = true")
+ .run(context -> assertThat(context.containsBean("otelMeterRegistry")).isFalse());
}
}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessorTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessorTest.java
new file mode 100644
index 0000000000..4789a13973
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/RestTemplateBeanPostProcessorTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import io.opentelemetry.api.OpenTelemetry;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.http.client.ClientHttpRequestInterceptor;
+import org.springframework.web.client.RestTemplate;
+
+class RestTemplateBeanPostProcessorTest {
+
+ @Test
+ @DisplayName("when processed bean is not of type RestTemplate should return object")
+ void returnsObject() {
+ BeanPostProcessor underTest = new RestTemplateBeanPostProcessor(OpenTelemetry.noop());
+
+ assertThat(underTest.postProcessAfterInitialization(new Object(), "testObject"))
+ .isExactlyInstanceOf(Object.class);
+ }
+
+ @Test
+ @DisplayName("when processed bean is of type RestTemplate should return RestTemplate")
+ void returnsRestTemplate() {
+ BeanPostProcessor underTest = new RestTemplateBeanPostProcessor(OpenTelemetry.noop());
+
+ assertThat(underTest.postProcessAfterInitialization(new RestTemplate(), "testRestTemplate"))
+ .isInstanceOf(RestTemplate.class);
+ }
+
+ @Test
+ @DisplayName("when processed bean is of type RestTemplate should add ONE RestTemplateInterceptor")
+ void addsRestTemplateInterceptor() {
+ BeanPostProcessor underTest = new RestTemplateBeanPostProcessor(OpenTelemetry.noop());
+
+ RestTemplate restTemplate = new RestTemplate();
+
+ underTest.postProcessAfterInitialization(restTemplate, "testRestTemplate");
+ underTest.postProcessAfterInitialization(restTemplate, "testRestTemplate");
+ underTest.postProcessAfterInitialization(restTemplate, "testRestTemplate");
+
+ assertThat(
+ restTemplate.getInterceptors().stream()
+ .filter(RestTemplateBeanPostProcessorTest::isOtelInstrumentationInterceptor)
+ .count())
+ .isEqualTo(1);
+ }
+
+ private static boolean isOtelInstrumentationInterceptor(ClientHttpRequestInterceptor rti) {
+ return rti.getClass().getName().startsWith("io.opentelemetry.instrumentation");
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java
similarity index 50%
rename from instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateAutoConfigurationTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java
index 84224f6252..f174672b83 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/httpclients/resttemplate/RestTemplateAutoConfigurationTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/web/SpringWebInstrumentationAutoConfigurationTest.java
@@ -3,30 +3,27 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.httpclients.resttemplate;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.web;
import static org.assertj.core.api.Assertions.assertThat;
-import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
-import org.junit.jupiter.api.DisplayName;
+import io.opentelemetry.api.OpenTelemetry;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-/** Spring Boot auto configuration test for {@link RestTemplateAutoConfiguration}. */
-class RestTemplateAutoConfigurationTest {
+class SpringWebInstrumentationAutoConfigurationTest {
private final ApplicationContextRunner contextRunner =
new ApplicationContextRunner()
+ .withBean(OpenTelemetry.class, OpenTelemetry::noop)
.withConfiguration(
- AutoConfigurations.of(
- OpenTelemetryAutoConfiguration.class, RestTemplateAutoConfiguration.class));
+ AutoConfigurations.of(SpringWebInstrumentationAutoConfiguration.class));
@Test
- @DisplayName("when httpclients are ENABLED should initialize RestTemplateInterceptor bean")
- void httpClientsEnabled() {
- this.contextRunner
- .withPropertyValues("otel.springboot.httpclients.enabled=true")
+ void instrumentationEnabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.spring-web.enabled=true")
.run(
context ->
assertThat(
@@ -37,20 +34,17 @@ class RestTemplateAutoConfigurationTest {
}
@Test
- @DisplayName("when httpclients are DISABLED should NOT initialize RestTemplateInterceptor bean")
- void disabledProperty() {
- this.contextRunner
- .withPropertyValues("otel.springboot.httpclients.enabled=false")
+ void instrumentationDisabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.spring-web.enabled=false")
.run(
context ->
assertThat(context.containsBean("otelRestTemplateBeanPostProcessor")).isFalse());
}
@Test
- @DisplayName(
- "when httpclients enabled property is MISSING should initialize RestTemplateInterceptor bean")
- void noProperty() {
- this.contextRunner.run(
+ void defaultConfiguration() {
+ contextRunner.run(
context ->
assertThat(
context.getBean(
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java
new file mode 100644
index 0000000000..aeecebf378
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import io.opentelemetry.api.OpenTelemetry;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+class SpringWebfluxInstrumentationAutoConfigurationTest {
+
+ private final ApplicationContextRunner contextRunner =
+ new ApplicationContextRunner()
+ .withBean(OpenTelemetry.class, OpenTelemetry::noop)
+ .withConfiguration(
+ AutoConfigurations.of(SpringWebfluxInstrumentationAutoConfiguration.class));
+
+ @Test
+ void instrumentationEnabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.spring-webflux.enabled=true")
+ .run(
+ context ->
+ assertThat(
+ context.getBean(
+ "otelWebClientBeanPostProcessor", WebClientBeanPostProcessor.class))
+ .isNotNull());
+ }
+
+ @Test
+ void instrumentationDisabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.spring-webflux.enabled=false")
+ .run(
+ context ->
+ assertThat(context.containsBean("otelWebClientBeanPostProcessor")).isFalse());
+ }
+
+ @Test
+ void defaultConfiguration() {
+ contextRunner.run(
+ context ->
+ assertThat(
+ context.getBean(
+ "otelWebClientBeanPostProcessor", WebClientBeanPostProcessor.class))
+ .isNotNull());
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessorTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessorTest.java
new file mode 100644
index 0000000000..10eff4bae7
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webflux/WebClientBeanPostProcessorTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webflux;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import io.opentelemetry.api.OpenTelemetry;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
+import org.springframework.web.reactive.function.client.WebClient;
+
+class WebClientBeanPostProcessorTest {
+
+ @Test
+ @DisplayName(
+ "when processed bean is NOT of type WebClient or WebClientBuilder should return Object")
+ void returnsObject() {
+ BeanPostProcessor underTest = new WebClientBeanPostProcessor(OpenTelemetry.noop());
+
+ assertThat(underTest.postProcessAfterInitialization(new Object(), "testObject"))
+ .isExactlyInstanceOf(Object.class);
+ }
+
+ @Test
+ @DisplayName("when processed bean is of type WebClient should return WebClient")
+ void returnsWebClient() {
+ BeanPostProcessor underTest = new WebClientBeanPostProcessor(OpenTelemetry.noop());
+
+ assertThat(underTest.postProcessAfterInitialization(WebClient.create(), "testWebClient"))
+ .isInstanceOf(WebClient.class);
+ }
+
+ @Test
+ @DisplayName("when processed bean is of type WebClientBuilder should return WebClientBuilder")
+ void returnsWebClientBuilder() {
+ BeanPostProcessor underTest = new WebClientBeanPostProcessor(OpenTelemetry.noop());
+
+ assertThat(
+ underTest.postProcessAfterInitialization(WebClient.builder(), "testWebClientBuilder"))
+ .isInstanceOf(WebClient.Builder.class);
+ }
+
+ @Test
+ @DisplayName("when processed bean is of type WebClient should add exchange filter to WebClient")
+ void addsExchangeFilterWebClient() {
+ BeanPostProcessor underTest = new WebClientBeanPostProcessor(OpenTelemetry.noop());
+
+ WebClient webClient = WebClient.create();
+ Object processedWebClient =
+ underTest.postProcessAfterInitialization(webClient, "testWebClient");
+
+ assertThat(processedWebClient).isInstanceOf(WebClient.class);
+ ((WebClient) processedWebClient)
+ .mutate()
+ .filters(
+ functions ->
+ assertThat(
+ functions.stream()
+ .filter(WebClientBeanPostProcessorTest::isOtelExchangeFilter)
+ .count())
+ .isEqualTo(1));
+ }
+
+ @Test
+ @DisplayName(
+ "when processed bean is of type WebClientBuilder should add ONE exchange filter to WebClientBuilder")
+ void addsExchangeFilterWebClientBuilder() {
+ BeanPostProcessor underTest = new WebClientBeanPostProcessor(OpenTelemetry.noop());
+
+ WebClient.Builder webClientBuilder = WebClient.builder();
+ underTest.postProcessAfterInitialization(webClientBuilder, "testWebClientBuilder");
+ underTest.postProcessAfterInitialization(webClientBuilder, "testWebClientBuilder");
+ underTest.postProcessAfterInitialization(webClientBuilder, "testWebClientBuilder");
+
+ webClientBuilder.filters(
+ functions ->
+ assertThat(
+ functions.stream()
+ .filter(WebClientBeanPostProcessorTest::isOtelExchangeFilter)
+ .count())
+ .isEqualTo(1));
+ }
+
+ private static boolean isOtelExchangeFilter(ExchangeFilterFunction wctf) {
+ return wctf.getClass().getName().startsWith("io.opentelemetry.instrumentation");
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java
new file mode 100644
index 0000000000..fffc164eab
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+import io.opentelemetry.api.OpenTelemetry;
+import javax.servlet.Filter;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+class SpringWebMvcInstrumentation5AutoConfigurationTest {
+
+ private final ApplicationContextRunner contextRunner =
+ new ApplicationContextRunner()
+ .withBean(OpenTelemetry.class, OpenTelemetry::noop)
+ .withConfiguration(
+ AutoConfigurations.of(SpringWebMvc5InstrumentationAutoConfiguration.class));
+
+ @BeforeEach
+ void setUp() {
+ assumeFalse(Boolean.getBoolean("testLatestDeps"));
+ }
+
+ @Test
+ void instrumentationEnabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.spring-webmvc.enabled=true")
+ .run(context -> assertThat(context.getBean("otelWebMvcFilter", Filter.class)).isNotNull());
+ }
+
+ @Test
+ void instrumentationDisabled() {
+ contextRunner
+ .withPropertyValues("otel.instrumentation.spring-webmvc.enabled=false")
+ .run(context -> assertThat(context.containsBean("otelWebMvcFilter")).isFalse());
+ }
+
+ @Test
+ void defaultConfiguration() {
+ contextRunner.run(
+ context -> assertThat(context.getBean("otelWebMvcFilter", Filter.class)).isNotNull());
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java
new file mode 100644
index 0000000000..4b37d5819b
--- /dev/null
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.webmvc;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
+
+import io.opentelemetry.api.OpenTelemetry;
+import jakarta.servlet.Filter;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+class SpringWebMvcInstrumentation6AutoConfigurationTest {
+
+ private final ApplicationContextRunner contextRunner =
+ new ApplicationContextRunner()
+ .withBean(OpenTelemetry.class, OpenTelemetry::noop)
+ .withConfiguration(
+ AutoConfigurations.of(SpringWebMvc6InstrumentationAutoConfiguration.class));
+
+ @BeforeEach
+ void setUp() {
+ assumeTrue(Boolean.getBoolean("testLatestDeps"));
+ }
+
+ @Test
+ void instrumentationEnabled() {
+ this.contextRunner
+ .withPropertyValues("otel.instrumentation.spring-webmvc.enabled=true")
+ .run(context -> assertThat(context.getBean("otelWebMvcFilter", Filter.class)).isNotNull());
+ }
+
+ @Test
+ void instrumentationDisabled() {
+ this.contextRunner
+ .withPropertyValues("otel.instrumentation.spring-webmvc.enabled=false")
+ .run(context -> assertThat(context.containsBean("otelWebMvcFilter")).isFalse());
+ }
+
+ @Test
+ void defaultConfiguration() {
+ this.contextRunner.run(
+ context -> assertThat(context.getBean("otelWebMvcFilter", Filter.class)).isNotNull());
+ }
+}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationSpring6Test.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationSpring6Test.java
deleted file mode 100644
index 5383154c80..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationSpring6Test.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.webmvc;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assumptions.assumeTrue;
-
-import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
-import jakarta.servlet.Filter;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.autoconfigure.AutoConfigurations;
-import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-
-/** Spring Boot auto configuration test for {@link WebMvcFilterAutoConfigurationSpring6}. */
-class WebMvcFilterAutoConfigurationSpring6Test {
- private final ApplicationContextRunner contextRunner =
- new ApplicationContextRunner()
- .withConfiguration(
- AutoConfigurations.of(
- OpenTelemetryAutoConfiguration.class,
- WebMvcFilterAutoConfigurationSpring6.class));
-
- @BeforeEach
- void setUp() {
- assumeTrue(Boolean.getBoolean("testLatestDeps"));
- }
-
- @Test
- @DisplayName("when web is ENABLED should initialize WebMvcTracingFilter bean")
- void webEnabled() {
- this.contextRunner
- .withPropertyValues("otel.springboot.web.enabled=true")
- .run(
- context ->
- assertThat(context.getBean("otelWebMvcInstrumentationFilter", Filter.class))
- .isNotNull());
- }
-
- @Test
- @DisplayName("when web is DISABLED should NOT initialize WebMvcTracingFilter bean")
- void disabledProperty() {
- this.contextRunner
- .withPropertyValues("otel.springboot.web.enabled=false")
- .run(
- context ->
- assertThat(context.containsBean("otelWebMvcInstrumentationFilter")).isFalse());
- }
-
- @Test
- @DisplayName("when web property is MISSING should initialize WebMvcTracingFilter bean")
- void noProperty() {
- this.contextRunner.run(
- context ->
- assertThat(context.getBean("otelWebMvcInstrumentationFilter", Filter.class))
- .isNotNull());
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationTest.java
deleted file mode 100644
index 6c82ae1823..0000000000
--- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/webmvc/WebMvcFilterAutoConfigurationTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.instrumentation.spring.autoconfigure.webmvc;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assumptions.assumeFalse;
-
-import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
-import javax.servlet.Filter;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.autoconfigure.AutoConfigurations;
-import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-
-/** Spring Boot auto configuration test for {@link WebMvcFilterAutoConfiguration}. */
-class WebMvcFilterAutoConfigurationTest {
- private final ApplicationContextRunner contextRunner =
- new ApplicationContextRunner()
- .withConfiguration(
- AutoConfigurations.of(
- OpenTelemetryAutoConfiguration.class, WebMvcFilterAutoConfiguration.class));
-
- @BeforeEach
- void setUp() {
- assumeFalse(Boolean.getBoolean("testLatestDeps"));
- }
-
- @Test
- @DisplayName("when web is ENABLED should initialize WebMvcTracingFilter bean")
- void webEnabled() {
- this.contextRunner
- .withPropertyValues("otel.springboot.web.enabled=true")
- .run(
- context ->
- assertThat(context.getBean("otelWebMvcInstrumentationFilter", Filter.class))
- .isNotNull());
- }
-
- @Test
- @DisplayName("when web is DISABLED should NOT initialize WebMvcTracingFilter bean")
- void disabledProperty() {
- this.contextRunner
- .withPropertyValues("otel.springboot.web.enabled=false")
- .run(
- context ->
- assertThat(context.containsBean("otelWebMvcInstrumentationFilter")).isFalse());
- }
-
- @Test
- @DisplayName("when web property is MISSING should initialize WebMvcTracingFilter bean")
- void noProperty() {
- this.contextRunner.run(
- context ->
- assertThat(context.getBean("otelWebMvcInstrumentationFilter", Filter.class))
- .isNotNull());
- }
-}
diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/logging/LogbackAppenderTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java
similarity index 97%
rename from instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/logging/LogbackAppenderTest.java
rename to instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java
index b27eef5142..3aae0d6501 100644
--- a/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/logging/LogbackAppenderTest.java
+++ b/instrumentation/spring/spring-boot-autoconfigure/src/testLogbackAppender/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/logging/LogbackAppenderTest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.spring.autoconfigure.logging;
+package io.opentelemetry.instrumentation.spring.autoconfigure.instrumentation.logging;
import static org.assertj.core.api.Assertions.assertThat;