目录
问题描述
尝试运行dubbo+spring时报错,错误代码为:
Exception in thread “main” java.lang.IllegalStateException: No such application config! Please add <dubbo:application name="…" /> to your spring config.
是说找不到我的dubbo的xml配置文件。但是事实上我配置了dubbo application name。。。
环境描述
使用IDEA整合spring+dubbo
dubbo依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.8</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
dubbo的2.6.8版本和我以前用过的2.4.10不同,使用了ClassPathXmlApplicationContext类来配置xml。
Provider代码:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception{
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("provider.xml");
app.start();
System.out.println("服务发布成功...");
System.in.read();
}
}
接口类和实现类就不放了,都是通用的。下面的provider.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:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="providerApi" owner="lanlan" />
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
<dubbo:service interface="com.dubbo.api.provider" ref="providerApi" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="providerApi" class="com.dubbo.api.impl.providerImpl"/>
</beans>
我有写<dubbo:application name,但是IDEA还是会给我报这个找不到<dubbo:application name的错误。
查看了配置文件位置,没问题,在resources下面,确实能够被扫描到。(因为扫描不到的时候报的是找不到文件的错误,而不是找不到dubbo:application name的错误)
找了一些其它方法,都没能解决。最后用了个神奇的方法解决的。
解决方案
再在provider.xml文件中添加一行dubbo:application name的设置。
provider.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:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="providerApi" owner="lanlan" />
<dubbo:application name="providerApi" owner="lanlan" />
<!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<!--<dubbo:application name="providerApi" owner="lanlan" />-->
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
<dubbo:service interface="com.dubbo.api.provider" ref="providerApi" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="providerApi" class="com.dubbo.api.impl.providerImpl"/>
</beans>
重新运行,运行成功。
去dubbo-admin上看,也看到了此服务。
我也不知道为什么成功,反正就是成功了。。。。。有大佬知道为什么吗