解决方式
jdk版本低于1.8导致的
1.检查项目打包版本是否低于1.8
2.检查项目启动使用的jdk版本是否低于1.8
我在项目中遇到的
1.本地、测试环境功能没有问题
2.正式环境部署了多台机器,功能偶尔不正常
3.拉取日志包含java.lang.NoClassDefFoundError: java/util/Base64错误
解决过程
1.功能偶尔不正常,说明集群中有正常的服务器
2.检查jar包编译版本,打开jar包找到文件:META-INF/MANIFEST.MF,文件中有Build-Jdk: 1.8.0_161。说明jdk版本是没有问题的。
3.结合以上两点,可以判定服务器环境可能是有问题的。
4.确认服务器jdk版本是否是1.8(检查是否是因为环境问题引起的)。
5.确认服务器包是否是最新版本(是否是漏发布引起的)。
6.以上确认都没有问题,无奈之下只能找运维重启(指定jdk版本的那种启动)。
7.重启的时候发现某台服务器的jdk配置不一样
异常的服务器配置
[root@localhost /]# java -version
⋮
[root@localhost /]# hash -l
builtin hash -p /usr/bin/java
[root@localhost /]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 1月 23 2019 /usr/bin/java -> /etc/alternatives/java
[root@localhost /]# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 35 1月 23 2019 /etc/alternatives/java -> /usr/java/jdk1.8..0_131/jre/bin/java
正常的服务器配置
[root@localhost /]# hash -l
builtin hash -p /usr/java/jdk1.8.0_131//bin/java java
8.异常服务器的配置java命令映射的是jre的bin目录
9.有这种配置的服务器上的应用重启,启动时指定jdk的bin目录,重启以后功能正常了。
nohup /usr/java/jdk1.8..0_131/bin/java -jar xxx.jar >/dev/null 2>&1 &