记录一次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包。


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


大家加油!!!


相关文章
|
2月前
|
Dubbo Cloud Native Java
干翻Dubbo系列第二篇:Dubbo3相对其他版本的升级
干翻Dubbo系列第二篇:Dubbo3相对其他版本的升级
|
10月前
|
JavaScript Dubbo 应用服务中间件
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
本文分享了 Dubbo3 Node.js 首个正式版本,演示基于 Triple 协议的 RPC 通信模式,包括代码生成、服务发布和服务访问等过程。
|
25天前
|
前端开发 Java Maven
dubbo-admin安装(分离版本)
dubbo-admin安装(分离版本)
10 0
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
49 2
|
7月前
|
Dubbo 应用服务中间件 API
Go语言微服务框架重磅升级:dubbo-go v3.2.0 -alpha 版本预览
随着 Dubbo3 在云原生微服务方向的快速发展,Dubbo 的 go 语言实现迎来了 Dubbo3 版本以来最全面、最大幅度的一次升级,这次升级是全方位的,涉及 API、协议、流量管控、可观测能力等。
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo 3.3.0-beta 版本正式发布
Dubbo 3.3.0-beta 版本正式发布
|
7月前
|
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 作为面向云原生时代的下一代微服务框架将具备规划的所有核心功能。
|
2月前
|
XML Dubbo Java
SpringBoot整合Dubbo和Zookeeper升级版
SpringBoot整合Dubbo和Zookeeper升级版
57 0
|
10月前
|
Dubbo JavaScript 应用服务中间件
浏览器可直接访问 Dubbo、gRPC 后端微服务,Dubbo-js 首个 alpha 版本来了!
Dubbo-js 已于 9 月份发布支持 Dubbo3 协议的首个 alpha 版本,它的发布将有机会彻底改变微服务前后端的架构与通信模式,让你能直接在浏览器页面或 web 服务器中访问后端 Dubbo、gRPC 服务。
浏览器可直接访问 Dubbo、gRPC 后端微服务,Dubbo-js 首个 alpha 版本来了!
|
10月前
|
JavaScript Dubbo 应用服务中间件
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布
Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布