dubbo 初始化两次的错误 Duplicate application configs

本文介绍了在Eclipse上使用Dubbo+Spring+Mybatis时遇到的'Duplicate application configs'错误,该错误是由于Dubbo的相关XML资源配置被加载了两次导致。通过分析错误日志和POM.xml配置,发现错误源于资源被过滤并复制到了两个不同的位置。解决方案是删除serviceApplicationContext.xml中的<import resource="classpath:META-INF/spring/dubbo.xml"/>,以避免重复加载dubbo.xml。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是错误提示:Duplicate application configs: <dubbo:application name="demo-provider" id="demo-provider" /> and <dubbo:application name="demo-provider" id="demo-provider2" />

最近在eclipse上搭建dubbo+spring+mybatis。provider启动是这样的。用注释段启动没问题,非注释段启动就报这个错了。

public class DemoProviderTest {


//    public static void main(String[] args) throws Exception {
//        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
//                new String[] {"META-INF/spring/serviceApplicationContext.xml"});
//        context.start();
//        
//        System.out.println("Hello!");
//        
//        System.in.read(); // press any key to exit
//        context.close();
//    }
public static void main(String[] args) throws Exception {
com.alibaba.dubbo.container.Main.main(args);
}
}


在日志里有这么一段,相当于加载了两次。

Pre-instantiating singletons in @16eabae: defining beans [com.alibaba.dubbo.config.spring.AnnotationBean,demo-provider,com.alibaba.dubbo.config.ConsumerConfig,com.alibaba.dubbo.config.RegistryConfig,dubbo,org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,com.alibaba.dubbo.config.spring.AnnotationBean2,demo-provider2,com.alibaba.dubbo.config.ConsumerConfig2,com.alibaba.dubbo.config.RegistryConfig2,dubbo2,org.springframework.context.support.PropertySourcesPlaceholderConfigurer#1,dataSource_mysql,sqlSessionFactory,org.mybatis.spring.mapper.


我的pom文件build段是这样的。再次说明,是用dubbo的main方法启动才出现的这个错误。


<build>
  <resources>
 
<resource>  
<!-- project开头的变量为maven内置变量
  - ${project.build.directory}代表target目录
-->
<targetPath>${project.build.directory}/classes</targetPath>  
<directory>src/main/resources</directory>  
<filtering>true</filtering>  
<includes>  
<include>**/*.xml</include> 
<include>**/*.properties</include>  
</includes>  
</resource>  
<!-- dubbo的main方法启动用到的配置文件最后需要在target/classess/META-INF/spring目录下生成
  - 若配置文件已在src/main/resources/META-INF/spring目录下,则可省略targetPath
-->   
<resource>  
            <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>  
            <directory>src/main/resources</directory>  
            <filtering>true</filtering>  
            <includes>  
                <include>serviceApplicationContext.xml</include>  
            </includes>  
        </resource>  
     
  </resources>
 
  <!-- 这里是为了在使用maven-dependency-plugin时,预防maven版本不一致导致的环境冲突 -->
<pluginManagement>  
<plugins>  
<plugin>  
<groupId>org.eclipse.m2e</groupId>  
<artifactId>lifecycle-mapping</artifactId>  
<version>1.0.0</version>  
<configuration>  
<lifecycleMappingMetadata>  
<pluginExecutions>  
<pluginExecution>  
<pluginExecutionFilter>  
<groupId>org.apache.maven.plugins</groupId>  
<artifactId>maven-dependency-plugin</artifactId>  
<versionRange>[2.0,)</versionRange>  
<goals>  
<goal>copy-dependencies</goal>  
</goals>  
</pluginExecutionFilter>  
<action>  
<ignore />  
</action>  
</pluginExecution>  
</pluginExecutions>  
</lifecycleMappingMetadata>  
</configuration>  
</plugin>  
</plugins>  
</pluginManagement> 

<plugins>
<!-- 将项目所需依赖打包到指定位置target/lib -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>  
<artifactId>maven-dependency-plugin</artifactId>  
<executions>  
<execution>  
<id>copy-dependencies</id>  
<phase>package</phase>  
<goals>  
<goal>copy-dependencies</goal>  
</goals>  
<configuration>  
<type>jar</type>  
<includeTypes>jar</includeTypes>  
<useUniqueVersions>false</useUniqueVersions>  
<outputDirectory>  
${project.build.directory}/lib  
</outputDirectory>  
</configuration>  
</execution>  
</executions>  
</plugin>

<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖  -->  
<plugin>  
<groupId>org.apache.maven.plugins</groupId>  
<artifactId>maven-jar-plugin</artifactId>  
<configuration>  
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>  
<useUniqueVersions>false</useUniqueVersions>  
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>  
</manifest>
<manifestEntries>
<!-- 在Class-Path中增加当前目录 --> 
<Class-Path>.</Class-Path>  
</manifestEntries>
</archive>  
</configuration>  
</plugin>  

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>  
</configuration>
</plugin>

</plugins>     
         
  </build>


原因:dubbo相关的xml资源被 了两次,在这里。

<resource>  
<!-- project开头的变量为maven内置变量
  - ${project.build.directory}代表target目录
-->
<targetPath>${project.build.directory}/classes</targetPath>  
<directory>src/main/resources</directory>  
<filtering>true</filtering>  
<includes>  
<include>**/*.xml</include> 
<include>**/*.properties</include>  
</includes>  
</resource>


然后在serviceApplicationContext.xml是这样的,注意加粗部分。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    
    <context:property-placeholder location="classpath*:*.properties" ignore-unresolvable="true"/>   
    <context:component-scan base-package="com.sail.demo.dubbomybatis.service"/>   
    <import resource="classpath:META-INF/spring/dubbo.xml"/>


    <import resource="classpath*:dataAccessContext.xml"/>


</beans>  


当dubbo的main方法执行时,会去读取jar包中的配置文件,dubbo.xml和serviceApplicationContext.xml分别读取了一遍。



我这里是将serviceApplicationContext.xml里的<import resource="classpath:META-INF/spring/dubbo.xml"/>这段删除,问题解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值