1.原因

    因项目业务需要,要调用RPC框架,项目原本已经依赖了很多RPC接口需要启动时加载,所以准备做成启动时不预加载。 就是在配置的时候加上check=false.

   官方文档解释的作用,就是Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"

2. 好处

首先check的配置在立即加载的环境下可以来检查是否有服务未初始化,设置为true,如容器初始化时有未初始化的服务被注入可抛出异常让应用初始化无法完成,设置为false则可以不影响应用的启动,后续服务初始化完成后依然可以正常连上。也就是说check=false的配置本身可以解决循环依赖的问题。

懒加载是一种bean加载策略,并非和dubbo有直接的联系,也并非直接为了解决服务的循环依赖而存在,这种加载方式主要作用在于节约资源,提升性能,亦可以解决循环依赖的问题,只是如有加载了dubbo服务引用的bean要应用懒加载策略,需要check设为false来防止出现未完全装配的bean影响应用的正常运行。

3.问题

   我们平时想调用RPC接口只需要在我们的dubbo配置文件中引入生产者的配置文件在POM.XML中加上依赖。

 但是这种配置文件是我们直接引入不可以修改属性,所以我们需要自己创建一个dubbo的配置文件将自己需要的接口引入进来再加上这个属性。

当我创建好文件将项目启动的时候,问题来了!

   

   问题很明显就是bean创建了两次,从网上寻找答案,就是dubbo版本升级后重复加载Bean的时候不再是覆盖,而是抛异常。继而我从项目中去寻找此接口并没有发现其他地方的引用,然后我就跟踪查看启动信息。

我默认扫描了spring文件夹下的所有配置文件,包括这个我新创建用来修改dubbo接口配置的文件。然后当我dubbo的文件再次加载的时候就会遇到这个问题。

原因就是:新创建的配置文件不要再放在启动就扫描的resources默认文件夹下,新创建一个文件夹去放你所创建的文件。

 4.反思

    遇到问题的时候要有思路的去解决,一定要查看日志,从这些可用的条件中去排查问题。

 

引用-----  

 https://blog.csdn.net/aqi__/article/details/78727339  dubbo常用的配置

 https://www.cnblogs.com/linjiqin/p/5859153.html