关于java:Jpom-290-发布将-H2-版本升级到-21-啦

24次阅读

共计 4370 个字符,预计需要花费 11 分钟才能阅读完成。

Jpom 2.9.0 公布将 H2 版本升级到 2.1 啦

🐣 新增性能

  1. 【server】SSH 终端新增全屏形式关上
    (感激 @jaseeon Gitee issues I5BS52)
  2. 【server】SSH 新增超时工夫配置(感激 @带刺的玫瑰)
  3. 【server】SFTP 新增超时工夫(感激 @带刺的玫瑰)(特别感谢 @hutool 作者紧急发版反对)

🐞 解决 BUG、优化性能

  1. 【server】降级 h2 版本,低版本存在破绽(CVE-2021-23463)
  2. 降级 SpringBoot、Hutool 版本
  3. 【server】修复监控日志未存储到对应的工作空间(感激 @带刺的玫瑰)

⚠️ 留神

此版本为不兼容降级,须要手动降级操作数据相干迁徙,操作流程如下:

  1. 导出低版本数据

    1. 启动程序参数外面增加 –backup-h2
    2. linux 环境举例:sh /xxxx/Server.sh restart --backup-h2
  2. 将导出的低版本数据(sql 文件) 导入到新版本中

    1. 启动程序参数外面增加 --replace-import-h2-sql=/xxxx.sql --transform-sql (门路须要替换为第一步控制台输入的 sql 文件保留门路)
    2. linux 环境举例:sh /xxxx/Server.sh restart --replace-import-h2-sql=/xxxx.sql --transform-sql

具体的降级阐明

前言

问:降级到 2.9.x 为什么要非凡解决?

:因为 H2 在 1.4.198, 2.0.202 版本间存在破绽,破绽编号为:CVE-2021-23463,所以须要尽快降级到最新版本来防止该破绽。
然而 H2 的 1.4.x 降级到 2.0.x 是不兼容版本升级,不能间接无感降级。必须迁徙旧数据到新版本中


问:该破绽呈现了一段时间,为什么当初才发修复版?

:当咱们看到破绽相干音讯就开始筹备计划,咱们刚开始想的计划是如何防止过多的人为操作,尽量自动化实现。
后果咱们尝试发现没有方法很好的防止(筹备出一个界面化的操作),最初采纳命令行形式操作。(此处主动🐶)

降级流程总览

  1. 须要先降级到 2.8.24+ 安装包下载地址

    1. 降级办法有:在线降级、手动上传 jar 包等形式降级
  2. 通过命令行的形式创立数据备份

    1. 启动程序参数外面增加 –backup-h2
    2. linux 环境举例:sh /xxxx/Server.sh restart --backup-h2
    3. 当控制台输入 Complete the backup database, save the path as /xxx/xxx/db/backup/xxxx.sql 字样示意备份胜利
  3. 手动替换 jar

    1. 将 lib 目录上面的 Server-2.8.x.jar 替换为最新的 Server-2.9.x.jar
    2. 留神可能须要批改 Server.sh 脚本外面的 RUNJAR 变量值为您上传新 jar 的文件名,如:Server-2.9.x.jar
  4. 通过指定 sql 文件形式启动

    1. 启动程序参数外面增加 --replace-import-h2-sql=/xxxx.sql --transform-sql (门路须要替换为第二步控制台输入的 sql 文件保留门路)
    2. linux 环境举例:sh /xxxx/Server.sh restart --replace-import-h2-sql=/xxxx.sql --transform-sql
  5. 察看管制输入内容

    1. 当控制台输入 Import successfully according to sql,/xxx/xxx/db/backup/xxxx.sql 字样示意降级胜利并主动启动程序
    2. 如果出现异常信息能够先尝试在搜索引擎搜寻看看是否有解决办法
    3. 分割官网帮助排查
  6. 欢快的应用 Jpom 2.9.x

相干问题阐明

问:必须先降级到 2.8.24+?

:非必须,因为 2.8.24+ 新增了命令行形式备份数据,这样在程序未启动前就将所有数据备份导出为 sql 保障导出的数据是最新并且残缺的。
如果您不想降级到 2.8.24+ 再降级到 2.9.x 那么能够先用治理身份登录进入零碎进入:【系统管理 -> 数据库备份】页面外面去创立一个全量备份记住备份文件实现门路

留神 不通过命令行备份不能保障导出的备份数据肯定是最新的奥,因为程序在运行中随时会产生新数据或者数据更新状况


问:如何查看备份记录中的备份文件门路?

:备份列表中状态列前面有一个复制按钮,点击一下就复制到粘贴板啦


问:执行 sh /xxxx/Server.sh restart --backup-h2 不失效该怎么办?

:如果你是从很早就应用了 Jpom 那么你当初治理服务端当脚本不是最新当,最新的治理脚本外面将执行命令的其余参数也传入了启动程序外面

解决办法有:

  1. 替换为最新的治理脚本文件 Server.sh
  2. 手动批改治理脚本,在脚本中 ARGS 变量最初增加一个 $@ 即可

    1. 残缺示例:ARGS="--jpom.applicationTag=${Tag} --spring.profiles.active=pro --server.port=2122 --jpom.log=${Path}log $@"

问:官网是不是遗记还用 windows 用户啦?

:没有的,因为 linux 用户偏多,所以拿 linux 举例。windows 解决方法相似

能够依照 Server.bat 中 if 判断持续扩大

set /p ID=
IF "!ID!"=="1" call:start
IF "!ID!"=="2" call:stop
IF "!ID!"=="3" call:status
IF "!ID!"=="4" call:restart
IF "!ID!"=="5" call:use
IF "!ID!"=="6" call:restart --rest:ip_config
IF "!ID!"=="7" call:restart --rest:load_init_db
IF "!ID!"=="8" call:restart --rest:super_user_pwd
IF "!ID!"=="0" EXIT

思路增加 IF, 比方:

set /p ID=
IF "!ID!"=="1" call:start
IF "!ID!"=="2" call:stop
IF "!ID!"=="3" call:status
IF "!ID!"=="4" call:restart
IF "!ID!"=="5" call:use
IF "!ID!"=="6" call:restart --rest:ip_config
IF "!ID!"=="7" call:restart --rest:load_init_db
IF "!ID!"=="8" call:restart --rest:super_user_pwd
IF "!ID!"=="9" call:restart --backup-h2
IF "!ID!"=="10" call:restart --replace-import-h2-sql=/xxxx.sql --transform-sql
IF "!ID!"=="0" EXIT

留神要批改 sql 门路


问:不想通过治理脚本来操作,还有其余办法吗?

:有

  1. 备份数据
java -jar server-2.8.24.jar --spring.profiles.active=pro --backup-h2
  1. 导入数据
java -jar server-2.9.0.jar --spring.profiles.active=pro --replace-import-h2-sql=/xxxx.sql --transform-sql
  1. 更新治理脚本中的:RUNJAR 变量值为:server-2.9.0.jar

留神

  1. 通过次形式肯定要在原目录操作
  2. 操作程序肯定是要先应用旧包备份数据,再通过新包导入数据

问:容器装置的应该如何降级?

:降级流程和 Linux 流程基本一致,须要留神的就是上传文件的形式须要先上传到宿主机,再通过 docker cp 形式将文件复制到容器中。

上面以从 2.8.24 降级到 2.9.0 为例:

# 留神:从 2.8.24 版本开始新增数据库备份的参数命令,倡议先降级到 2.8.24
# 备份低版本数据库
docker exec -it jpom-server /bin/bash /usr/local/jpom-server/Server.sh restart --backup-h2
# 执行完后看到【Need to log out manually: Ctrl+C/Control+C】用 Ctrl + C 手动退出

# 替换脚本命令中为新版 Jar 包
docker exec -it jpom-server sed -r -e '/^RUNJAR="/s@.*@RUNJAR="Server-2.9.0.jar"@g' /usr/local/jpom-server/Server.sh -i

# docker cp 本地文件门路 容器 ID/ 容器 NAME: 容器内门路
docker cp /root/Server-2.9.0.jar jpom-server:/usr/local/jpom-server/lib/Server-2.9.0.jar

# 进入容器外部
docker exec -it jpom-server /bin/bash
# 将低版本的数据库导入到新版本中
backupFile=`ls -t /usr/local/jpom-server/data/db/backup/ | head -1`
/bin/bash /usr/local/jpom-server/Server.sh restart --replace-import-h2-sql=/usr/local/jpom-server/data/db/backup/$backupFile --transform-sql
# 启动实现后,输出 Ctrl + C 退出。# 退出容器,回到宿主机
exit

问:降级服务端后须要将插件端也降级到 2.9.0+ 吗?

:咱们倡议服务端和插件端的版本统一,能够同步降级到 2.9.0。

只有您在应用过程中没有发现局部性能异样,无奈应用,接口 404 等状况下,插件端不及时更新也是没有太多问题的。

插件端和服务端版本差别请尽量统一或者放大,避免出现局部性能调整后关联影响。

问:哪里下载 2.8.24+ 安装包?

:https://gitee.com/dromara/Jpom/attach_files

问:插件端该如何降级到 2.9.0+ ?

:插件端还是能够应用以前到形式:手动上传 jar,在线降级等。举荐应用在线降级,能够在服务端页面批量降级插件端版本

Jpom 链接

官网:https://jpom.io

Gitee: https://gitee.com/dromara/Jpom

Github: https://github.com/dromara/Jpom

常见问题:https://jpom-docs.keepbx.cn/pages/FQA/

微信群:jpom66 (请备注 Jpom)

此文章版权归属 dromara 开源组织所有(https://dromara.org/)

正文完
 0