这个问题最初是在这里报告的:https://github.com/spring-projects/spring-boot/pull/34508#issuecomment-1557438909,作者:@chicobento:
@jonatan-ivanov 您好,我们在将其集成到我们的项目中时面临一些问题。场景如下:
- 我们有一个自定义类,它实现
SpanExporter接口并在内部包装我们自己的可变对象OtlpHttpSpanExporter- 这样,我们需要阻止
OtlpAutoConfiguration创建OtlpHttpSpanExporterBean。但是, @ConditionalOnMissingBean 仅基于 OtlpHttpSpanExporter 和 OtlpGrpcSpanExporter bean,这不是我们的情况,因为我们实现了SpanExporter接口并且不能从其OtlpHttpSpanExporter最终的继承我尝试过的一些可能的问题解决方案:
- 删除
OtlpAutoConfiguration:此行为是由内部库添加的,因此我无法轻松删除OtlpAutoConfiguration而不影响使用我们的库的应用程序- 替换
SpanProcessor: 因为该OpenTelemetryAutoConfiguration.otelSpanProcessor方法没有@ConditionalOnMissingBean.我无法轻松地将 替换为会忽略Bean 提供的SpanProcessor自定义 BeanOtlpHttpSpanExporterOtlpAutoConfiguration- 替换
OpenTelemetryAutoConfiguration.otelSdkTracerProvider:这不起作用,因为它将SpanProcessor.otelSpanProcessor始终实例化 BatchSpanProcessor 并启动其线程。我必须关闭它您对我如何克服这个问题还有其他建议吗?
我想知道当前的工厂方法是否
OtlpAutoConfiguration.otlpHttpSpanExporter太具有侵入性,因为它总是提供一个SpanExporterBean,即使应用程序已经定义了自己的 BeanSpanExporter?我们可以把它改成简单的@ConditionalOnMissingBean(SpanExporter.class)吗?