【Seata】】seata-server-1.5.2-直接部署,启动报错NoClassDefFoundError的坑

一、部署

1. 部署流程

详细部署步骤参照上篇文章 [seata-server-1.5.1-直接部署(整合nacos)、使用]

本来打算新写一篇的,误操作成修改原来的1.5.1直接部署文档了,咨询客服不能回滚到历史版本,所以1.5.1直接部署重写了一篇,链接如上

2. seata-1.5.2区别

下载路径

wget https://github.com/seata/seata/releases/download/v1.5.2/seata-server-1.5.2.tar.gz

默认支持MySQL8.0版本

seata-1.5.2支持MySQL8.0版本

二、启动报错的坑

1. 现象

按照上述1.5.1步骤全部部署完毕,结果启动时报错了NoClassDefFoundError,很多人被这一步劝退
在这里插入图片描述

2. 分析原因

2.1 启动日志分析

不知道原因的情况下,首先只能看日志报的什么错,注意日志输出的seata启动命令 ,注意到了一点-Dloader.path=../lib 加载 ../lib 路径的jar ,到这不禁有两个疑问:
1) …/lib下有什么?
2)1.5.2的打包和启动方式变了?
在这里插入图片描述

2.2 目录结构/打包方式 区别

  1. 带着上述疑问,先看下 seata-1.5.1seata-1.5.2 目录结构的区别:
    在这里插入图片描述

  2. 得出结论 seata-1.5.2打包方式变了:将依赖的jar包打到了外部目录 lib 中; 而 seata-1.5.1 版本则是按传统方式 将依赖jar包打在了 target/seata-server.jar

  3. 验证如下:
    在这里插入图片描述

2.3 确定原因

从上述分析中可以看出来,seata 从1.5.2 开始,打包和启动方式变了,1.5.2起启动命令需要指定依赖jar加载路径为 安装包下的lib目录。

seata-server.sh中的启动命令,-Dloader.path=../lib 用的是相对路径

只有在 seata包的 bin/路径下执行 seata-server.sh 才能正确获取到 lib 中的jar包正常启动

如下:

cd seata-1.5.1/bin/
./seata-server.sh

如果在其他路径下执行,则会出现上述NoClassDefFoundError错,因为执行shell所在路径的相对路径中 …/lib 不存在

3. 解决

3.1 方式一:修改seata-server.sh脚本(推荐)

vim seata-1.5.1/bin/seata-server.sh

找到 -Dloader.path=../lib配置改为绝对路径: -Dloader.path=${BASEDIR}/lib

#备份原来的JAVA_OPT配置
JAVA_OPT="${JAVA_OPT} -server -Dloader.path=${BASEDIR}/lib ......

在这里插入图片描述

3.2 方式二:每次都到bin目录下执行seata-server.sh

自行验证即可,每次都切到bin路径下太麻烦了,个人不喜欢这种方式

4. 验证

在seata根路径下执行./bin/seata-server.sh,查看启动日志
在这里插入图片描述
lib路径正确,且seata-1.5.2正常启动

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值