然后我在启动类上手动注入,@Import(HttpTraceFilter.class)
依然启动报错
No qualifying bean of type 'javax.servlet.Filter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value="httpTraceFilter")}
退回到2.1.8之后一切正常;
<p>从springboot 2.2.0.M3开始,HttpTraceRepository将变成条件式声明,不再通过自动配置声明。就是默认禁用了management.trace.http</p>
具体请看:Disable management.trace.http by default #15039
解决办法是用@Conditional注解进行条件式声明,例如
@ConditionalOnMissingBean
@Bean
public HttpTraceRepository httpTraceRepository() {
return new InMemoryHttpTraceRepository();
}
结论:由于HttpTraceRepository变成条件式声明,因为顶层调用InMemoryHttpTraceRepository的servlet拦截器HttpTraceFilter默认也是不会通过auto-configuration自动声明bean, 你去要自已声明或通过条件式声明解决问题。
如果对你有用,请采纳
回复 <a class="referer" target="_blank">@CielSwift</a> : <a class="referer" target="_blank">@Bean</a>
@ConditionalOnMissingBean
HttpTraceFilter httpTraceFilter(HttpTraceRepository repository, HttpExchangeTracer tracer) {
return new HttpTraceFilter(repository, tracer);
}
回复 <a class="referer" target="_blank">@CielSwift</a> : @Import是依赖第三方包中的配置声明bean,但HttpTraceFilter在spring-boot-actuator-autoconfigure包中的配置类,已变成条件式声明,必须在BeanFactory中有HttpTraceRepository和HttpExchangeTracer的bean,才会自动配置声明。
感谢;我不太明白的是 为什么 @Import(HttpTraceFilter.class)无效呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。