【发布时间】: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