【问题标题】:Why brave.Tracer can not be autowired in @Configuration class?为什么brave.Tracer 不能在@Configuration 类中自动装配?
【发布时间】:2022-02-02 17:58:20
【问题描述】:

我正在将 spring-boot 升级到 2.6.2 和 spring-cloud 到 2021.0.0,升级后,brave.Tracer 无法在 @Configuration 类中自动装配。

Tracer 自动装配为 @Bean 组件的参数。

我已经尝试过question 中的解决方案,但不起作用。

这是@Configuration 类:

@Configuration
@ConditionalOnWebApplication
@AutoConfigureAfter(CommonsAutoConfig.class)
@EnableConfigurationProperties({CorsConfig.class, TracingConfiguration.class})
public class WebCommonsAutoConfig
{
    ......
    @Bean(name = "httpRestRequestResponseLogger")
    @RefreshScope
    public FilterRegistrationBean httpRestRequestResponseLogger(
            RequestResponseLogger requestResponseLogger, 
            HeaderAccessor headerAccessor,
            Tracer tracer, 
            HeaderExtractor<HttpServletRequestLoggingWrapper> httpHeaderExtractor)
    {
        final HttpLogFilter httpLogFilter=  new HttpLogFilter(requestResponseLogger, 
                   headerAccessor, tracer, httpHeaderExtractor);
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(httpLogFilter);
        registrationBean.setDispatcherTypes(ASYNC, ERROR, FORWARD, INCLUDE, REQUEST);
        registrationBean.setOrder(HttpLogFilter.ORDER);
        return registrationBean;
    }
    ....
}

带有以下错误日志:

...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error 
creating bean with name 'scopedTarget.httpRestRequestResponseLogger' defined in class 
path resource [com/vzt/WebCommonsAutoConfig.class]: Unsatisfied dependency expressed 
through method 'httpRestRequestResponseLogger' parameter 2; 
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
qualifying bean of type 'brave.Tracer' available: expected at least 1 bean which 
qualifies as autowire candidate. Dependency annotations: {}
 

那么我应该怎么做才能在这个@Configuration 类中自动装配brave.Tracer?

【问题讨论】:

  • 解决了。此问题是由 io.zipkin.brave 和 spring-boot 的版本不匹配引起的。 spring cloud 2020之后,spring框架中加入了brave,所以我们可以直接使用spring-cloud-starter-sleuth来实现brave.Tracer。

标签: spring spring-boot spring-cloud autowired spring-cloud-sleuth


【解决方案1】:

您很可能需要添加@AutoConfigureAfter(BraveAutoConfiguration.class)。我知道 spring cloud sleuth 在类路径上?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多