Back off if spring-boot-opentelemetry is missing

Closes gh-46303
This commit is contained in:
Moritz Halbritter 2025-08-20 13:50:18 +02:00
parent aff6ed3830
commit bd1df38ce0
2 changed files with 10 additions and 1 deletions

View File

@ -51,7 +51,7 @@ import org.springframework.core.task.VirtualThreadTaskExecutor;
before = { CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class },
after = MetricsAutoConfiguration.class)
@ConditionalOnBean(Clock.class)
@ConditionalOnClass(OtlpMeterRegistry.class)
@ConditionalOnClass({ OtlpMeterRegistry.class, OpenTelemetryProperties.class })
@ConditionalOnEnabledMetricsExport("otlp")
@EnableConfigurationProperties({ OtlpMetricsProperties.class, OpenTelemetryProperties.class })
public final class OtlpMetricsExportAutoConfiguration {

View File

@ -28,6 +28,7 @@ import org.junit.jupiter.api.condition.JRE;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.metrics.autoconfigure.export.otlp.OtlpMetricsExportAutoConfiguration.PropertiesOtlpMetricsConnectionDetails;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.testsupport.assertj.ScheduledExecutorServiceAssert;
@ -41,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link OtlpMetricsExportAutoConfiguration}.
*
* @author Eddú Meléndez
* @author Moritz Halbritter
*/
class OtlpMetricsExportAutoConfigurationTests {
@ -148,6 +150,13 @@ class OtlpMetricsExportAutoConfigurationTests {
.run(this::assertHasCustomMetricsSender);
}
@Test
void shouldBackOffIfSpringBootOpenTelemetryIsMissing() {
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
.withClassLoader(new FilteredClassLoader("org.springframework.boot.opentelemetry"))
.run((context) -> assertThat(context).doesNotHaveBean(OtlpMetricsExportAutoConfiguration.class));
}
private void assertHasCustomMetricsSender(AssertableApplicationContext context) {
assertThat(context).hasSingleBean(OtlpMeterRegistry.class);
OtlpMeterRegistry registry = context.getBean(OtlpMeterRegistry.class);