记录一次Dubbo 版本升级遇到的问题及解决方案

简介: 遇事不慌,慢慢搞

前言

一个阳光明媚的上午,临近午饭,收到了一个邮件。

image.png

开始纠结吃还是不吃的问题,当然本着职业操守,那肯定是要先吃饭的,不过看着提示还是挺简单的,就直接给jar 包,maven 文件进行了修改升级,行云流水,一顿操作猛如虎,打包,上传,部署,一气呵成。开开心心吃饭去了。


启动报错

吃完饭回来发现这个项目没有启动成功,本身这个服务是测试环境的,之前也是有问题一直是瘫痪的状态,所以感受不是很直观。正好还有其他问题,就暂且放过了这个事儿。


结果组长来说,你这得启动成功啊,不成功不算是解决漏洞,还需要回复邮件,那就刚一波吧。说实话,公司这个项目使用tomcat 容器进行运行而不是直接使用spring boot 我真的是头疼。还有就是对tomcat 的使用已经是很遥远的记忆了,虽然spring boot 内部也是使用

项目情况

spring 4.2.2

dubbo 2.7.7


看下报错内容

28-Feb-202217:54:38.348SEVERE [startStop-1] org.apache.catalina.core.StandardContext.listenerStartExceptionsendingcontextinitializedeventtolistenerinstanceofclass [org.springframework.web.context.ContextLoaderListener]
org.springframework.beans.factory.BeanCreationException: Errorcreatingbeanwithname'referenceAnnotationBeanPostProcessor': Instantiationofbeanfailed; nestedexceptionisorg.springframework.beans.BeanInstantiationException: Failedtoinstantiate [org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor]: Constructorthrewexception; nestedexceptionisjava.lang.NoSuchMethodError: org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.setClassValuesAsString(Z)Vatorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
atorg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
atorg.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
atorg.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:207)
atorg.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:683)
atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:522)
atorg.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
atorg.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
atorg.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
atorg.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4699)
atorg.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5165)
atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
atorg.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
atorg.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
atjava.util.concurrent.FutureTask.run(FutureTask.java:266)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atjava.lang.Thread.run(Thread.java:748)
Causedby: org.springframework.beans.BeanInstantiationException: Failedtoinstantiate [org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor]: Constructorthrewexception; nestedexceptionisjava.lang.NoSuchMethodError: org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.setClassValuesAsString(Z)Vatorg.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
atorg.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098)
                ... 22moreCausedby: java.lang.NoSuchMethodError: org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.setClassValuesAsString(Z)Vatorg.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.<init>(ReferenceAnnotationBeanPostProcessor.java:106)
atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)
atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
atjava.lang.reflect.Constructor.newInstance(Constructor.java:423)
atorg.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)

贴个类似的问题及解决方案

https://github.com/alibaba/spring-cloud-alibaba/issues/2310

可以对照alibaba 给出的版本对应表进行构建项目

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E


实践操作

通过maven 仓库检查dubbo-2.7.15的相关依赖

https://mvnrepository.com/artifact/org.apache.dubbo/dubbo/2.7.15

image.png

通过相同的方式看该jar 包还需要什么,进行对项目的引入。打包,构建,上传,部署,还是出现了上面的报错。准备继续在https://github.com/apache/dubbo/issues/9494

dubbo 的git hub 仓库里溜达溜达。


坚持不懈,大家加油!!!



最终解决

将项目打包发布到测试环境后,war包在tomcat 中会被自动解压,进入WEB-INF/lib 目录,看打包后的依赖jar 都有哪些,无意间发现有两个相同名字不同版本的jar包。

spring-context-support-1.0.11.jar

spring-context-support-1.0.6.jar

想着有两个相同名称的jar 包,可能是用错了版本,而且上面也说了,dubbo 2.7.15 需要的是1.0.11 版本jar。抱着试一试的心态,将多出来的1.0.6版本的jar 删除。

重新启动tomcat 一片祥和清净,项目启动。


感觉是jar 包冲突就在pom 文件里一通翻找,最终也没找到依赖1.0.6 版本的spring-context-support jar 是哪来的。也临近下班着急回家给家人送钥匙就先以解决问题为本吧。结果第二天早上一来,重新解压war 包想重现当初的情况,发现多余的jar 包没解压出来。


这我就懂了啊,因为测试环境的tomcat 没有自动解压war包而是手动解压的,我是通过unzip -o war-name.war 命令进行解压的,是没有覆盖掉1.0.6 版本的包的,所以它一直存在,虽然我改了pom 升级了该包。以后一定要把老的东西删干净,再解压新的war包。


好啦,一点一点的发现问题的本质,也算是我们搞程序人的素养了,虽然再过程中有怀疑过自己,可最终解决了问题就很哇塞了。


大家加油!!!


相关文章
|
4月前
|
Dubbo Cloud Native Java
干翻Dubbo系列第二篇:Dubbo3相对其他版本的升级
干翻Dubbo系列第二篇:Dubbo3相对其他版本的升级
|
7月前
|
JavaScript Dubbo 应用服务中间件
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
本文分享了 Dubbo3 Node.js 首个正式版本,演示基于 Triple 协议的 RPC 通信模式,包括代码生成、服务发布和服务访问等过程。
|
XML Dubbo Java
详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)
详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)
777 0
详解如何自定义Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本两种写法)
|
Dubbo JavaScript 前端开发
可视化Dubbo测试工具iubbox 2.0版本发布啦
可视化Dubbo测试工具iubbox 2.0版本发布啦
582 0
|
4月前
|
Dubbo 应用服务中间件 API
Go语言微服务框架重磅升级:dubbo-go v3.2.0 -alpha 版本预览
随着 Dubbo3 在云原生微服务方向的快速发展,Dubbo 的 go 语言实现迎来了 Dubbo3 版本以来最全面、最大幅度的一次升级,这次升级是全方位的,涉及 API、协议、流量管控、可观测能力等。
|
4月前
|
Dubbo Java 应用服务中间件
Dubbo 3.3.0-beta 版本正式发布
Dubbo 3.3.0-beta 版本正式发布
|
4月前
|
Dubbo Java 应用服务中间件
Dubbo 3.3.0-beta 版本正式发布
近日,Apache Dubbo 发布了 3.3 分支大版本 3.3.0-beta.1,相较于 3.2 系列版本,3.3.0-beta 引入了一些重量级的功能升级,按照社区规划,3.3 也将是 Dubbo3 非常重要的一个里程碑大版本,在 3.3.0 首个正式版本之后 Dubbo3 将正式进入长期稳定维护态,即标志着 Dubbo3 作为面向云原生时代的下一代微服务框架将具备规划的所有核心功能。
|
4月前
|
Dubbo 应用服务中间件 Go
Go语言微服务框架重磅升级:dubbo-go v3.2.0 -alpha 版本预览
Go语言微服务框架重磅升级:dubbo-go v3.2.0 -alpha 版本预览
|
7月前
|
JavaScript Dubbo 应用服务中间件
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
|
7月前
|
Dubbo JavaScript 应用服务中间件
浏览器可直接访问 Dubbo、gRPC 后端微服务,Dubbo-js 首个alpha 版本来了!
浏览器可直接访问 Dubbo、gRPC 后端微服务,Dubbo-js 首个alpha 版本来了!