先记录现象:

dubbo整合zipkin时,我的配置文件是这样的

@Bean("okHttpSender")
public OkHttpSenderFactoryBean okHttpSender(){
OkHttpSenderFactoryBean okHttpSenderFactoryBean = new OkHttpSenderFactoryBean();
//zipkin服务端
okHttpSenderFactoryBean.setEndpoint("http://localhost:9411/api/v2/spans");
return okHttpSenderFactoryBean;
} @Bean
public AsyncReporterFactoryBean reporter(@Qualifier("okHttpSender")OkHttpSender sender){
AsyncReporterFactoryBean asyncReporterFactoryBean = new AsyncReporterFactoryBean();
asyncReporterFactoryBean.setSender(sender);
asyncReporterFactoryBean.setCloseTimeout(1000);
return asyncReporterFactoryBean;
} @Bean("tracing")
public TracingFactoryBean tracingFactoryBean(@Qualifier("reporter") Reporter reporter) throws Exception {
TracingFactoryBean tracingFactoryBean = new TracingFactoryBean();
tracingFactoryBean.setLocalServiceName("rcinvestTracing");
tracingFactoryBean.setSpanReporter(reporter);
CurrentTraceContextFactoryBean currentTraceContextFactoryBean = new CurrentTraceContextFactoryBean();
CurrentTraceContext.ScopeDecorator scopeDecorator = MDCScopeDecorator.create();
currentTraceContextFactoryBean.setScopeDecorators(Arrays.asList(scopeDecorator));
tracingFactoryBean.setCurrentTraceContext(currentTraceContextFactoryBean.getObject());
return tracingFactoryBean;
}

结果提示自动注入没有发现reporter

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'zipkin2.reporter.Reporter<?>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=reporter)}

然后我改了一下

 public TracingFactoryBean tracingFactoryBean(@Qualifier("reporter") Reporter reporter) throws Exception
改为:
public TracingFactoryBean tracingFactoryBean(@Qualifier("reporter") AsyncReporterFactoryBean reporter) throws Exception

又提示循环注入:

Requested bean is currently in creation: Is there an unresolvable circular reference?

虽然通过源码发现了导致问题的源码,但是我也不知道具体是什么原因导致的问题

最后通过修改bean加载的顺序,上述俩个问题都解决了

@Bean("tracing")
public TracingFactoryBean tracingFactoryBean(@Qualifier("reporter") AsyncReporter reporter) throws Exception {
TracingFactoryBean tracingFactoryBean = new TracingFactoryBean();
tracingFactoryBean.setLocalServiceName("rcinvestTracing");
tracingFactoryBean.setSpanReporter(reporter);
CurrentTraceContextFactoryBean currentTraceContextFactoryBean = new CurrentTraceContextFactoryBean();
CurrentTraceContext.ScopeDecorator scopeDecorator = MDCScopeDecorator.create();
currentTraceContextFactoryBean.setScopeDecorators(Arrays.asList(scopeDecorator));
tracingFactoryBean.setCurrentTraceContext(currentTraceContextFactoryBean.getObject());
return tracingFactoryBean;
} @Bean
public AsyncReporterFactoryBean reporter(@Qualifier("okHttpSender")OkHttpSender sender){
AsyncReporterFactoryBean asyncReporterFactoryBean = new AsyncReporterFactoryBean();
asyncReporterFactoryBean.setSender(sender);
asyncReporterFactoryBean.setCloseTimeout(1000);
return asyncReporterFactoryBean;
} @Bean("okHttpSender")
public OkHttpSenderFactoryBean okHttpSender(){
OkHttpSenderFactoryBean okHttpSenderFactoryBean = new OkHttpSenderFactoryBean();
//zipkin服务端
okHttpSenderFactoryBean.setEndpoint("http://localhost:9411/api/v2/spans");
return okHttpSenderFactoryBean;
}

猜测:父级bean放在上面加载,需要注入的bean,放在下面加载是不是就能就觉问题

springboot由于bean加载顺序导致的问题的更多相关文章

  1. SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣

    在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...

  2. SpringBoot中的bean加载顺序

    https://www.dazhuanlan.com/2019/10/22/5daebc5d16429/ 最近在做传统Spring项目到SpringBoot项目迁移过程中,遇到了一些bean加载顺序的 ...

  3. springboot 配置文件的加载顺序

    springboot 配置文件的加载顺序1.在命令行中传入的参数.2. SPRING APPLICATION JSON中的属性. SPRING_APPLICATION—JSON是以JSON格式配置在系 ...

  4. 【spring】bean加载顺序

    问题来源 有一个bean为A,一个bean为B.想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值. 如果只是在A里单纯的写着: private B b; private S ...

  5. SpringBoot的配置文件加载顺序和使用方式

    1.bootstrap.properties bootstrap.properties 配置文件是由"根"上下文优先加载,程序启动之初就感知 如:Spring Cloud Conf ...

  6. spring bean加载顺序指定方式之一

    在某些情况下,我们在容器启动的时候做一些事情,举个例子,加载缓存等.. 此时我们会希望某个bean先被加载并执行其中的afterpropertiesset方法. 因为spring默认是通过contex ...

  7. 记录一个bootstrap因js加载顺序导致的问题(tstrap-table-mobile.min.js:7 Uncaught TypeError: Cannot read property 'defaults' of undefined)

    问题描述: 网上找了会没看到答案,然后看了下源码,发现也没有问题,想到js加载的顺序,改了下,发现问题没了. 正确的顺序: 我之前把 <script src="/js/plugins/ ...

  8. iframe加载顺序导致数据访问出现问题

    背景: 一个页面A内有一个iframe,src指向了B页面. 问题: 页面A通过Ajax获取服务器数据,并赋值给了页面A的全局变量gData,页面B要用到页面A的数据gData.那么问题来了当B访问g ...

  9. SpringBoot的配置文件加载顺序以及如何获取jar包里的资源路径

    一.读取配置文件的四种方式 这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档. 1.1jar包同级目录下的config文件夹里的配置文件 其实我以前就见过这种方式了,只是不知道怎么做的 ...

随机推荐

  1. 笔记四(Competitor Analysis Test小结)

    1.关机后启动电脑,测试BIOS的POST time 2.进入睡眠模式后,按任意键,通过Windows logs查看bios的init时间 3.进入BIOS setup的快捷键,一般为F2 4.进入B ...

  2. java实现磁盘先来先服务算法

    package demo; import java.awt.List; import java.util.ArrayList; import java.util.Arrays; public clas ...

  3. Qt自定义委托在QTableView中绘制控件、图片、文字

    自定义委托,继承于,QStyledItemDelegate类,重载Paint()函数, 1.实现在QTableView中绘制 格式字符串 2.实现在QTableView中绘制进度条 3.实现在QTab ...

  4. Bootstrap form-group and form-control

    https://github.com/twbs/bootstrap/blob/21f3375f21e9a7a5155d0cd783fd2bc7aeee8485/scss/_forms.scss htt ...

  5. python3 django项目从项目中导出依赖包

    1. 在项目的根目录中使用mac终端执行命令, pip3 freeze > requirements.txt #requirements.txt只是个名字可以随便起,一般默认为requireme ...

  6. docker下搭建owncloud

    在ubuntu下 搭建owncloud 用docker-compose启动,owncloud.yml文件内容 owncloud: image: owncloud: restart: always 开机 ...

  7. [转]Maven项目读取src.main.resources下的文件

    要取编译后的路径,而不是你看到的src/main/resources的路径.如下: URL url = MyTest.class.getClassLoader().getResource(" ...

  8. Scrapy框架(1)

    参考博客: 10.scrapy框架简介和基础应用 Scrapy框架(1)

  9. 【文章存档】Local Git 如何部署分支

    又来存档文章了,链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-servi ...

  10. 启动Nginx 出现 nginx: [emerg] unknown directive "锘?user" 错误

    出现这种情况 一般是修改配置文件 nginx.conf 造成的 如果你修改文件后出现 那基本上就是这个原因 启动不了 重新打开 改为UTF-8 无BOM编码