Skip to content

Commit 66dd600

Browse files
authored
fix otel.properties in spring boot starter (#10559)
1 parent d739628 commit 66dd600

File tree

11 files changed

+83
-19
lines changed

11 files changed

+83
-19
lines changed

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

+11-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpMetricExporterAutoConfiguration;
1414
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpSpanExporterAutoConfiguration;
1515
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.MapConverter;
16+
import io.opentelemetry.instrumentation.spring.autoconfigure.propagators.PropagationProperties;
1617
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.OtelResourceAutoConfiguration;
1718
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringConfigProperties;
1819
import io.opentelemetry.sdk.OpenTelemetrySdk;
@@ -57,7 +58,11 @@
5758
* <p>Updates the sampler probability for the configured {@link TracerProvider}.
5859
*/
5960
@Configuration
60-
@EnableConfigurationProperties({SamplerProperties.class, OtlpExporterProperties.class})
61+
@EnableConfigurationProperties({
62+
SamplerProperties.class,
63+
OtlpExporterProperties.class,
64+
PropagationProperties.class
65+
})
6166
public class OpenTelemetryAutoConfiguration {
6267

6368
public OpenTelemetryAutoConfiguration() {}
@@ -96,8 +101,11 @@ static class Metric {}
96101
@Bean
97102
@ConditionalOnMissingBean
98103
ConfigProperties configProperties(
99-
Environment env, OtlpExporterProperties otlpExporterProperties) {
100-
return new SpringConfigProperties(env, new SpelExpressionParser(), otlpExporterProperties);
104+
Environment env,
105+
OtlpExporterProperties otlpExporterProperties,
106+
PropagationProperties propagationProperties) {
107+
return new SpringConfigProperties(
108+
env, new SpelExpressionParser(), otlpExporterProperties, propagationProperties);
101109
}
102110

103111
@Bean(destroyMethod = "") // SDK components are shutdown from the OpenTelemetry instance
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.propagators;
7+
8+
import java.util.Arrays;
9+
import java.util.List;
10+
import org.springframework.boot.context.properties.ConfigurationProperties;
11+
12+
/** Configuration for propagators. */
13+
@ConfigurationProperties(prefix = "otel.propagation")
14+
@Deprecated // use otel.propagators instead
15+
public final class DeprecatedPropagationProperties {
16+
17+
private List<String> type = Arrays.asList("tracecontext", "baggage");
18+
19+
public List<String> getType() {
20+
return type;
21+
}
22+
23+
public void setType(List<String> type) {
24+
this.type = type;
25+
}
26+
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
/** Configures {@link ContextPropagators} bean for propagation. */
2424
@Configuration
25-
@EnableConfigurationProperties(PropagationProperties.class)
25+
@EnableConfigurationProperties(DeprecatedPropagationProperties.class)
2626
@AutoConfigureBefore(OpenTelemetryAutoConfiguration.class)
2727
@ConditionalOnProperty(prefix = "otel.propagation", name = "enabled", matchIfMissing = true)
2828
@SuppressWarnings("deprecation")
@@ -44,7 +44,7 @@ static class PropagatorsConfiguration {
4444
@Bean
4545
TextMapPropagator compositeTextMapPropagator(
4646
BeanFactory beanFactory,
47-
PropagationProperties properties,
47+
DeprecatedPropagationProperties properties,
4848
ConfigProperties configProperties) {
4949
return CompositeTextMapPropagatorFactory.getCompositeTextMapPropagator(
5050
beanFactory, configProperties.getList("otel.propagators", properties.getType()));

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

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,21 @@
55

66
package io.opentelemetry.instrumentation.spring.autoconfigure.propagators;
77

8-
import java.util.Arrays;
8+
import java.util.Collections;
99
import java.util.List;
1010
import org.springframework.boot.context.properties.ConfigurationProperties;
1111

1212
/** Configuration for propagators. */
13-
@ConfigurationProperties(prefix = "otel.propagation")
14-
@Deprecated // use otel.propagators instead
13+
@ConfigurationProperties(prefix = "otel")
1514
public final class PropagationProperties {
1615

17-
private List<String> type = Arrays.asList("tracecontext", "baggage");
16+
private List<String> propagators = Collections.emptyList();
1817

19-
public List<String> getType() {
20-
return type;
18+
public List<String> getPropagators() {
19+
return propagators;
2120
}
2221

23-
public void setType(List<String> type) {
24-
this.type = type;
22+
public void setPropagators(List<String> propagators) {
23+
this.propagators = propagators;
2524
}
2625
}

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

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil;
99
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpExporterProperties;
10+
import io.opentelemetry.instrumentation.spring.autoconfigure.propagators.PropagationProperties;
1011
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1112
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
1213
import java.time.Duration;
@@ -22,14 +23,17 @@ public class SpringConfigProperties implements ConfigProperties {
2223

2324
private final ExpressionParser parser;
2425
private final OtlpExporterProperties otlpExporterProperties;
26+
private final PropagationProperties propagationProperties;
2527

2628
public SpringConfigProperties(
2729
Environment environment,
2830
ExpressionParser parser,
29-
OtlpExporterProperties otlpExporterProperties) {
31+
OtlpExporterProperties otlpExporterProperties,
32+
PropagationProperties propagationProperties) {
3033
this.environment = environment;
3134
this.parser = parser;
3235
this.otlpExporterProperties = otlpExporterProperties;
36+
this.propagationProperties = propagationProperties;
3337
}
3438

3539
@Nullable
@@ -71,6 +75,9 @@ public Double getDouble(String name) {
7175
@SuppressWarnings("unchecked")
7276
@Override
7377
public List<String> getList(String name) {
78+
if (name.equals("otel.propagators")) {
79+
return propagationProperties.getPropagators();
80+
}
7481
List<String> value = environment.getProperty(name, List.class);
7582
return value == null ? Collections.emptyList() : value;
7683
}

instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/exporters/otlp/OtlpExporterPropertiesTest.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static org.assertj.core.api.Assertions.entry;
1010

1111
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
12+
import io.opentelemetry.instrumentation.spring.autoconfigure.propagators.PropagationProperties;
1213
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.OtelResourceAutoConfiguration;
1314
import io.opentelemetry.instrumentation.spring.autoconfigure.resources.SpringConfigProperties;
1415
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
@@ -90,6 +91,7 @@ private static ConfigProperties getConfig(AssertableApplicationContext context)
9091
return new SpringConfigProperties(
9192
context.getBean("environment", Environment.class),
9293
new SpelExpressionParser(),
93-
context.getBean(OtlpExporterProperties.class));
94+
context.getBean(OtlpExporterProperties.class),
95+
new PropagationProperties());
9496
}
9597
}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ void hasType() {
3131
.withPropertyValues("otel.propagation.type=xray,b3")
3232
.run(
3333
context -> {
34-
PropagationProperties propertiesBean = context.getBean(PropagationProperties.class);
34+
DeprecatedPropagationProperties propertiesBean =
35+
context.getBean(DeprecatedPropagationProperties.class);
3536

3637
assertThat(propertiesBean.getType()).isEqualTo(Arrays.asList("xray", "b3"));
3738
});
@@ -43,7 +44,7 @@ void hasDefaultTypes() {
4344

4445
this.contextRunner.run(
4546
context ->
46-
assertThat(context.getBean(PropagationProperties.class).getType())
47+
assertThat(context.getBean(DeprecatedPropagationProperties.class).getType())
4748
.containsExactly("tracecontext", "baggage"));
4849
}
4950
}

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static org.assertj.core.api.Assertions.entry;
1010

1111
import io.opentelemetry.instrumentation.spring.autoconfigure.exporters.otlp.OtlpExporterProperties;
12+
import io.opentelemetry.instrumentation.spring.autoconfigure.propagators.PropagationProperties;
1213
import org.junit.jupiter.api.DisplayName;
1314
import org.junit.jupiter.api.Test;
1415
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -29,7 +30,10 @@ void shouldInitializeAttributesByMapInArow() {
2930
Environment env = context.getBean("environment", Environment.class);
3031
SpringConfigProperties config =
3132
new SpringConfigProperties(
32-
env, new SpelExpressionParser(), new OtlpExporterProperties());
33+
env,
34+
new SpelExpressionParser(),
35+
new OtlpExporterProperties(),
36+
new PropagationProperties());
3337

3438
assertThat(config.getMap("otel.springboot.test.map"))
3539
.contains(

smoke-tests-otel-starter/src/main/resources/application.properties

-1
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
otel:
2+
instrumentation:
3+
logback-appender:
4+
experimental:
5+
capture-code-attributes: true
6+
propagators:
7+
- b3

smoke-tests-otel-starter/src/test/java/io/opentelemetry/smoketest/OtelSpringStarterSmokeTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static org.assertj.core.api.Assertions.assertThat;
99

1010
import io.opentelemetry.api.trace.SpanKind;
11+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1112
import io.opentelemetry.sdk.logs.data.LogRecordData;
1213
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
1314
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
@@ -54,6 +55,8 @@ class OtelSpringStarterSmokeTest {
5455

5556
@Autowired private TestRestTemplate testRestTemplate;
5657

58+
@Autowired private ConfigProperties configProperties;
59+
5760
@Configuration(proxyBeanMethods = false)
5861
static class TestConfiguration {
5962
@Bean
@@ -72,6 +75,14 @@ public LogRecordExporter logRecordExporter() {
7275
}
7376
}
7477

78+
@Test
79+
void propertyConversion() {
80+
assertThat(configProperties.getMap("otel.exporter.otlp.headers"))
81+
.containsEntry("a", "1")
82+
.containsEntry("b", "2");
83+
assertThat(configProperties.getList("otel.propagators")).containsExactly("b3");
84+
}
85+
7586
@Test
7687
void shouldSendTelemetry() throws InterruptedException {
7788

0 commit comments

Comments
 (0)