Duplicate provider configs常见错误解决方案
Duplicate provider configs常见错误
Duplicate provider configs字面意思就是配置重复加载了,但排查起来,原因是多样的,现在就常见的几种错误及解决方案发一下。
xml配置和标签重复
1.xml配置了provider
<dubbo:application name="liquidation-provider"/>
- 标签启动
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@EnableDubboConfig
@DubboComponentScan
public @interface EnableDubbo {
这两都会加载dubbo的配置,导致重复加载,去掉其中一种即可。
本地项目启动报错
这种问题,把项目打包出去,单独启动tomcat中的war包,发现没有问题,但在本地启动就会报这个错误,导致有的人一时找不出问题,就自动放弃,这样多不好。特别有些时候需要我们本地调试项目,这个问题就很突出了,今天捣鼓了一个小时左右,终于将这个错误解决。
以下是解决思路,希望对其他人有所帮助。
-
错误图示如下:
-
看到这个错误,首先想是哪里在文件中多写了一行dubbo:provider配置,把dubbo-provider.xml翻来覆去的看了一个遍,也没有重复的地方,排除;
-
标签排除,因为我这个不是Springboot项目启动;
-
排查dubbo-provider.xml的加载文件,ctrl+h,如下图:
-
整个项目看了一下,加载项只有web.xml,点进去看一下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:dubbo-provider.xml</param-value>
</context-param>
找到问题点了,classpath就是项目的根目录,classpath*
就是根目录下的所有文件,如果有dubbo-provider.xml,就会加载,idea项目如下图所示:
这也就是为什么,打包成war去执行,不报错,而放到本地开发工具启动就会报错的原因;
6. 找到原因后,我将*去掉,如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-provider.xml</param-value>
</context-param>
7.启动项目,效果如下:
- 至此问题修复。