目前java的技术迭代相当快,相关框架组件和中间件的配套升级也是一系列,下面记录一下遇到的相关问题及其解决办法。

1、IDE工具

一直在用eclipse,还是Oxygen版本,但是这个版本JDK8以上不支持,去年查eclipse官网,还没有新版本,尝试过IDEA的破解版和社区版,破解版在自动引用最新spring依赖包时,总会出现unknown的版本号问题,社区版装配起来太繁琐,碰巧今年eclipse终于推出新版,所以,最终确定,还是使用完全开源的eclipse,专做java语言开发的IDE。

2、安装JDK17

JDK8与JDK17不兼容,JDK17是选用的.zip解压方式安装,解压后,直接配置环境变量即可,JDK没有jre,使用eclipse还是需要jre去buildpath,也可以直接将jre的路径指向jdk路径,eclipse的问题就迎刃而解,也可以手动使用命令生成jre文件包,就在JDK的目录下即可,但是要把模块加全了,之前使用这个命令:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre,有个log的类不在这里面,具体命令格式,还是需要自己到官网好好学习一下。

3、springboot升级及引发的其它升级

springboot从2.3.9.RELEASE升级到2.5.14,因为springboot的升级,spring cloud需从Hoxton.SR12升级至2020.0.6。

4、dubbo相关

启动会报错:Can't create adaptive extension interface org.apache.dubbo.rpc.Protocol

远程调用没有实现类,网上有配置VM参数的帖子,我推断是JDK升级的缘故,所以将dubbo从2.7直接升级到最新版本3.1,升级后在配置部分就开始报错了,原dubbo2.7+spring cloud alibaba2.2.6的配置需要做些更改,官网无法找到适用dubbo3的spring cloud alibaba的配置样例,dubbo3变化挺大,经过考虑,暂时先不配置spring cloud 和spring cloud alibaba,dubbo3跟springboot进行搭配,改用zookeeper,晚点再引入spring cloud alibaba,坚定支持和跟随spring cloud alibaba的框架,dubbo这种更细粒度的服务,未来可以考虑跟nacos分开使用,或者再切换回来。

5、zookeeper升级

dubbo3默认引入zookeeper3.7,运行时连接报断开,升级zookeeper版本至3.7.1,之前为3.4版本,升级后,项目终于顺利启动。小插曲:zookeeper3.7.1有个admin server,默认占用端口号8080,端口易冲突,配置文件设置一下,加上参数:admin.serverPort=8888

6、采用dubbo3跟JDK17版本冲突

服务可以正常注册,但是consumer实例化provider的时候,会报错,只报一次,虽然接口调用还可以,但是报错总是问题,需要解决。报错内容:

java.lang.reflect.InaccessibleObjectException: Unable to make field private byte java.lang.StackTraceElement.format accessible: module java.base does not "opens java.lang" to unnamed module @44f75083

官方说明:Java Platform, Standard Edition Oracle JDK 9 Migration Guide, Release 9

解决办法,在启动时加上VM参数,命令行方式:

--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED

这里用到java.lang和java.math,根据报错提示找到需要开放权限的包即可。eclipse启动设置如下:

 

provider和consumer都要配置,挺麻烦的,应该是dubbo底层用到的包跟JDK不兼容,查到有说是lombok的版本低问题,但是已经是最新版本了,暂时先这样解决。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐