阿里dubbo2.6.0升级2.7.8
- 改pom.xml文件
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
- 改java代码
将引用com.alibab.dubbo的地方改为com.apache.dubbo
启动服务后出现如下报错:
nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [dubbo.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getEnvironment()Lorg/springframework/core/env/Environment;
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) ~[spring-beans-3.2.18.RELEASE.jar:3.2.18.RELEASE]
........
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [dubbo.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getEnvironment()Lorg/springframework/core/env/Environment;
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:413) ~[spring-beans-3.2.18.RELEASE.jar:3.2.18.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335) ~[spring-beans-3.2.18.RELEASE.jar:3.2.18.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) ~[spring-beans-3.2.18.RELEASE.jar:3.2.18.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:258) ~[spring-beans-3.2.18.RELEASE.jar:3.2.18.RELEASE]
... 26 more
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getEnvironment()Lorg/springframework/core/env/Environment;
at org.apache.dubbo.config.spring.schema.DubboBeanDefinitionParser.resolveAttribute(DubboBeanDefinitionParser.java:419) ~[dubbo-2.7.8.jar:2.7.8]
at org.apache.dubbo.config.spring.schema.DubboBeanDefinitionParser.parse(DubboBeanDefinitionParser.java:85) ~[dubbo-2.7.8.jar:2.7.8]
项目中使用的spring版本比较老,是3.2.18版本,可以看到,启动后提示找不到
org.springframework.beans.factory.xml.XmlReaderContext.getEnvironment()
我们先看下是哪里引用了,进入错误代码处,可以看到是at org.apache.dubbo.config.spring.schema.DubboBeanDefinitionParser.resolveAttribute(DubboBeanDefinitionParser.java:419) ~[dubbo-2.7.8.jar:2.7.8]处报错,打开对应的源码,有如下代码:
Environment environment = parserContext.getReaderContext().getEnvironment();
这个ParserContext是spring中用来解析XML文件的来,我们进入对应的spring-beans包,确实没有这个方法,这就说明我们使用的spring版本和dubbo-2.7.8版本不适配,如果我们需要继续使用dubbo新版本,就需要对spring进行升级,通过查找验证,发现spring4.1.1版本之后才开始有这个方法:
public final Environment getEnvironment() {
return this.reader.getEnvironment();
}
那这里至少需要将spring升级至4.1.1版本才可以使用,重新引入spring版本,启动项目,服务政策运行。