Skip to content

Commit c8b34e1

Browse files
committed
use ConfigProperties instead of spring style injection, because it's compatible with all spring versions, honors properties customizers, and easier to find usages
1 parent b7effb0 commit c8b34e1

File tree

4 files changed

+61
-30
lines changed

4 files changed

+61
-30
lines changed

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java

+45-19
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@
1818
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
1919
import io.opentelemetry.sdk.autoconfigure.internal.ComponentLoader;
2020
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
21+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
2122
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
23+
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
24+
import java.util.Collections;
2225
import java.util.List;
2326
import java.util.Optional;
2427
import java.util.stream.Collectors;
28+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2529
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2630
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2731
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
@@ -78,31 +82,37 @@ public ResourceProvider otelDistroVersionResourceProvider() {
7882
}
7983

8084
@Bean
81-
// If you change the bean name, also change it in the OpenTelemetryJdbcDriverAutoConfiguration
82-
// class
83-
public OpenTelemetry openTelemetry(
85+
public AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk(
8486
Environment env,
8587
OtlpExporterProperties otlpExporterProperties,
8688
OtelResourceProperties resourceProperties,
8789
PropagationProperties propagationProperties,
8890
OpenTelemetrySdkComponentLoader componentLoader) {
8991

90-
OpenTelemetry openTelemetry =
91-
AutoConfigureUtil.setComponentLoader(
92-
AutoConfigureUtil.setConfigPropertiesCustomizer(
93-
AutoConfiguredOpenTelemetrySdk.builder(),
94-
c ->
95-
SpringConfigProperties.create(
96-
env,
97-
otlpExporterProperties,
98-
resourceProperties,
99-
propagationProperties,
100-
c)),
101-
componentLoader)
102-
.build()
103-
.getOpenTelemetrySdk();
104-
105-
return openTelemetry;
92+
return AutoConfigureUtil.setComponentLoader(
93+
AutoConfigureUtil.setConfigPropertiesCustomizer(
94+
AutoConfiguredOpenTelemetrySdk.builder(),
95+
c ->
96+
SpringConfigProperties.create(
97+
env,
98+
otlpExporterProperties,
99+
resourceProperties,
100+
propagationProperties,
101+
c)),
102+
componentLoader)
103+
.build();
104+
}
105+
106+
@Bean
107+
public OpenTelemetry openTelemetry(
108+
AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
109+
return autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk();
110+
}
111+
112+
@Bean("configProperties")
113+
public ConfigProperties configProperties(
114+
AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
115+
return AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk);
106116
}
107117
}
108118

@@ -115,6 +125,22 @@ public static class DisabledOpenTelemetrySdkConfig {
115125
public OpenTelemetry openTelemetry() {
116126
return OpenTelemetry.noop();
117127
}
128+
129+
@Bean("configProperties")
130+
public ConfigProperties configProperties() {
131+
return DefaultConfigProperties.createFromMap(Collections.emptyMap());
132+
}
133+
}
134+
135+
@Configuration
136+
@ConditionalOnBean(OpenTelemetry.class)
137+
@ConditionalOnMissingBean({ConfigProperties.class})
138+
public static class FallbackConfigProperties {
139+
140+
@Bean("configProperties")
141+
public ConfigProperties configProperties() {
142+
return DefaultConfigProperties.create(Collections.emptyMap());
143+
}
118144
}
119145

120146
/**

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/ConcurrentKafkaListenerContainerFactoryPostProcessor.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,21 @@
77

88
import io.opentelemetry.api.OpenTelemetry;
99
import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry;
10+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1011
import org.springframework.beans.factory.ObjectProvider;
1112
import org.springframework.beans.factory.config.BeanPostProcessor;
1213
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
1314

1415
class ConcurrentKafkaListenerContainerFactoryPostProcessor implements BeanPostProcessor {
1516

1617
private final ObjectProvider<OpenTelemetry> openTelemetryProvider;
17-
private final boolean experimentalSpanAttributes;
18+
private final ObjectProvider<ConfigProperties> configPropertiesProvider;
1819

1920
ConcurrentKafkaListenerContainerFactoryPostProcessor(
20-
ObjectProvider<OpenTelemetry> openTelemetryProvider, boolean experimentalSpanAttributes) {
21+
ObjectProvider<OpenTelemetry> openTelemetryProvider,
22+
ObjectProvider<ConfigProperties> configPropertiesProvider) {
2123
this.openTelemetryProvider = openTelemetryProvider;
22-
this.experimentalSpanAttributes = experimentalSpanAttributes;
24+
this.configPropertiesProvider = configPropertiesProvider;
2325
}
2426

2527
@Override
@@ -32,7 +34,10 @@ public Object postProcessAfterInitialization(Object bean, String beanName) {
3234
(ConcurrentKafkaListenerContainerFactory<?, ?>) bean;
3335
SpringKafkaTelemetry springKafkaTelemetry =
3436
SpringKafkaTelemetry.builder(openTelemetryProvider.getObject())
35-
.setCaptureExperimentalSpanAttributes(experimentalSpanAttributes)
37+
.setCaptureExperimentalSpanAttributes(
38+
configPropertiesProvider
39+
.getObject()
40+
.getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false))
3641
.build();
3742
listenerContainerFactory.setBatchInterceptor(springKafkaTelemetry.createBatchInterceptor());
3843
listenerContainerFactory.setRecordInterceptor(springKafkaTelemetry.createRecordInterceptor());

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import io.opentelemetry.api.OpenTelemetry;
99
import io.opentelemetry.instrumentation.kafkaclients.v2_6.KafkaTelemetry;
1010
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.SdkEnabled;
11+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1112
import org.springframework.beans.factory.ObjectProvider;
12-
import org.springframework.beans.factory.annotation.Value;
1313
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
1414
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
1515
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -20,7 +20,7 @@
2020
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
2121
import org.springframework.kafka.core.KafkaTemplate;
2222

23-
@ConditionalOnBean(OpenTelemetry.class)
23+
@ConditionalOnBean({OpenTelemetry.class, ConfigProperties.class})
2424
@ConditionalOnClass({KafkaTemplate.class, ConcurrentKafkaListenerContainerFactory.class})
2525
@ConditionalOnProperty(name = "otel.instrumentation.kafka.enabled", matchIfMissing = true)
2626
@Conditional(SdkEnabled.class)
@@ -39,9 +39,8 @@ DefaultKafkaProducerFactoryCustomizer otelKafkaProducerFactoryCustomizer(
3939
static ConcurrentKafkaListenerContainerFactoryPostProcessor
4040
otelKafkaListenerContainerFactoryBeanPostProcessor(
4141
ObjectProvider<OpenTelemetry> openTelemetryProvider,
42-
@Value("${otel.instrumentation.kafka.experimental-span-attributes:false}")
43-
boolean experimentalSpanAttributes) {
42+
ObjectProvider<ConfigProperties> configPropertiesProvider) {
4443
return new ConcurrentKafkaListenerContainerFactoryPostProcessor(
45-
openTelemetryProvider, experimentalSpanAttributes);
44+
openTelemetryProvider, configPropertiesProvider);
4645
}
4746
}

instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfigurationTest.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ void customOpenTelemetry() {
4848
context ->
4949
assertThat(context)
5050
.hasBean("customOpenTelemetry")
51-
.doesNotHaveBean("openTelemetry"));
51+
.doesNotHaveBean("openTelemetry")
52+
.hasBean("configProperties"));
5253
}
5354

5455
@Test
@@ -57,7 +58,7 @@ void customOpenTelemetry() {
5758
void initializeProvidersAndOpenTelemetry() {
5859
this.contextRunner
5960
.withConfiguration(AutoConfigurations.of(OpenTelemetryAutoConfiguration.class))
60-
.run(context -> assertThat(context).hasBean("openTelemetry"));
61+
.run(context -> assertThat(context).hasBean("openTelemetry").hasBean("configProperties"));
6162
}
6263

6364
@Test

0 commit comments

Comments
 (0)