Auto-configure OtlpHttpSpanExporter only if property is set

- Remove the default value of 'management.otlp.tracing.endpoint'

Closes gh-35596
This commit is contained in:
Moritz Halbritter 2023-06-13 08:14:22 +02:00
parent cd018aff9c
commit 214f06083b
3 changed files with 13 additions and 3 deletions

View File

@ -30,6 +30,7 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -45,6 +46,7 @@ import org.springframework.context.annotation.Bean;
* define an {@link OtlpGrpcSpanExporter} and this auto-configuration will back off. * define an {@link OtlpGrpcSpanExporter} and this auto-configuration will back off.
* *
* @author Jonatan Ivanov * @author Jonatan Ivanov
* @author Moritz Halbritter
* @since 3.1.0 * @since 3.1.0
*/ */
@AutoConfiguration @AutoConfiguration
@ -56,6 +58,7 @@ public class OtlpAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean(value = OtlpHttpSpanExporter.class, @ConditionalOnMissingBean(value = OtlpHttpSpanExporter.class,
type = "io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter") type = "io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter")
@ConditionalOnProperty(prefix = "management.otlp.tracing", name = "endpoint")
OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties) { OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties) {
OtlpHttpSpanExporterBuilder builder = OtlpHttpSpanExporter.builder() OtlpHttpSpanExporterBuilder builder = OtlpHttpSpanExporter.builder()
.setEndpoint(properties.getEndpoint()) .setEndpoint(properties.getEndpoint())

View File

@ -34,7 +34,7 @@ public class OtlpProperties {
/** /**
* URL to the OTel collector's HTTP API. * URL to the OTel collector's HTTP API.
*/ */
private String endpoint = "http://localhost:4318/v1/traces"; private String endpoint;
/** /**
* Call timeout for the OTel Collector to process an exported batch of data. This * Call timeout for the OTel Collector to process an exported batch of data. This

View File

@ -33,16 +33,23 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link OtlpAutoConfiguration}. * Tests for {@link OtlpAutoConfiguration}.
* *
* @author Jonatan Ivanov * @author Jonatan Ivanov
* @author Moritz Halbritter
*/ */
class OtlpAutoConfigurationTests { class OtlpAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(OtlpAutoConfiguration.class)); .withConfiguration(AutoConfigurations.of(OtlpAutoConfiguration.class));
@Test
void shouldNotSupplyBeansIfPropertyIsNotSet() {
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(OtlpHttpSpanExporter.class));
}
@Test @Test
void shouldSupplyBeans() { void shouldSupplyBeans() {
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(OtlpHttpSpanExporter.class) this.contextRunner.withPropertyValues("management.otlp.tracing.endpoint=http://localhost:4318/v1/traces")
.hasSingleBean(SpanExporter.class)); .run((context) -> assertThat(context).hasSingleBean(OtlpHttpSpanExporter.class)
.hasSingleBean(SpanExporter.class));
} }
@Test @Test