惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
I
InfoQ
B
Blog RSS Feed
D
Docker
GbyAI
GbyAI
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
F
Fortinet All Blogs
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
M
MIT News - Artificial intelligence
C
Check Point Blog
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
博客园 - Franky
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
Last Week in AI
Last Week in AI
L
LangChain Blog

热爱生活与梦想

迁移LeanCloud的Waline评论数据到TiDB/Neon 25年江浙地区暑假自驾游之感慨 使用阿里云灵码继续完成构建 SSL 证书管理器 亲手给儿子做的棒棒糖摩天轮六一礼物 使用腾讯云 CodeBuddy 构建 SSL 证书管理器 修复代码块默认高度相关缺陷 HugoNexT4.7.2 新功能和升级提示 改善代码块折叠和选中功能 支持Github风格的警告样式 新增音乐短代码功能支持 给文章添加摘要和过期提示功能 回顾24年的过去总结 修复Mathjax行内显示公式的问题 给Hugo文章增加阅读更多跳转的锚点定位功能 Win10隐匿的VPN设置和L2TP连接常见错误 Go语言中“糟糕”的日期时间格式化设计 DaoCloud道客提供的免费Docker镜像代理服务 感谢万能淘宝让自己吃到喜欢的美食 WSL运行时遇到未知异常错误无法使用 隐藏的换行符导致Base64加密解密失败 MySQL自带客户端直接免密登录操作 Linux系统中删除目录软链接的注意项 Java程序调用外网API时CA问题 如何不关机重启WSL2恢复虚拟服务 在Windows上安装Podman容器平台做虚拟化 记一次无法弹出移动硬盘的记录 为友情链接添加自动检测脚本 重新激活Github的2FA认证 Linux中使用tar压缩命令排除文件 继续小米手环的健康生活之旅
替换SpringBoot里的文件
凡梦星尘 · 2021-04-14 · via 热爱生活与梦想

现在使用Spring Boot架构的应用开发来说是非常的普遍,统一化的打包部署确实带来不少便利,但当遇到问题时也是会比较棘手。或许你会觉得很惊讶,但如果说这是产品部署运维过程中遇到的难题需要修改Spring Boot应用程序,你就会觉得困难也是不奇怪的。本文就来分享下如何使用jar命令应对线上部署产品时,要临时替换Spring Boot应用中的Jar包的操作。

在测试环境部署某个产品应用时,在最后启动时遇到失败,查看并分析启动日志,发现了如下的堆栈日志信息:

spring-boot-replace-jar-01.png

看到此MySQL驱动的类名,当时心中已经有了答案,估计肯定是因为高版本的MySQL驱动程序不兼容低版本的MySQL Server所引起的。接下来使用如下的 jar 命令进一步确认下便是:

1
2
$ jar -tvf semxxx.jar | grep mysql
mysql-connector-java-8.0.12.jar

当前测试环境使用的 VM 集成镜像,里面很多组件版本相对比较低,但一直使用都没有问题也未曾再升级。

从上面错误的堆栈日志中有看到DruidDataSource字样,猜测此开发使用了Druid数据库连接池,那还是很有希望的,因为Druid数据库连接池有个自动适配数据库驱动程序类的能力特性,但愿开发在写代码时没有使用硬编码的形式。

网上搜索了一些关于 jar 命令如何打包有主运行程序的JAR包后,便着手开始替换MySQL程序的工作。相关步骤如下:

  • 解压产品打包好的spring-boot应用程序
1
$ jar xf semantic-xxxx.jar -C tmp/
  • 删除lib目录下的MySQL高版本驱动
1
2
$ cd ./tmp/BOOT-INF/lib/
$ rm -rf mysql-connector-java-8.0.16.jar
  • 添加低版本的MySQL驱动包
1
2
$ cd ./tmp
$ cp ~/mysql-connector-java-5.1.34-bin.jar ./BOOT-INF/lib/
  • 修改classpath.idx文件中的JAR列表
1
2
3
$ cd ./tmp/BOOT-INF/
$ vim classpath.idx
$ # 把那个高版本驱动程序JAR名称修改成低版本的名称即可
  • 重新打包Jar
1
2
$ cd ./tmp
$ jar cfM0 semantic-xxxx.jar .

最后就是重新启动应用程序,“万幸”我们的程序员们没有写硬编码,启动成功,如愿进入到了产品的操作界面,功能使用也一切正常。

参考文章: