此版本为不兼容升级,需要手动升级操作数据相关迁移,操作流程如下:
sh /xxxx/Server.sh restart --backup-h2
--replace-import-h2-sql=/xxxx.sql --transform-sql
(路径需要替换为第一步控制台输出的 sql 文件保存路径)sh /xxxx/Server.sh restart --replace-import-h2-sql=/xxxx.sql --transform-sql
答 :因为 H2 在 1.4.198, 2.0.202
版本间存在漏洞,漏洞编号为:CVE-2021-23463
,所以需要尽快升级到最新版本来避免该漏洞。 但是 H2 的 1.4.x 升级到 2.0.x 是不兼容版本升级,不能直接无感升级。必须迁移旧数据到新版本中
答:当我们看到漏洞相关消息就开始准备方案,我们刚开始想的方案是如何避免过多的人为操作,尽量自动化完成。 结果我们尝试发现没有办法很好的避免(准备出一个界面化的操作),最后采用命令行方式操作。(此处自动)
sh /xxxx/Server.sh restart --backup-h2
Complete the backup database, save the path as /xxx/xxx/db/backup/xxxx.sql
字样表示备份成功Server-2.8.x.jar
替换为最新的 Server-2.9.x.jar
Server.sh
脚本里面的 RUNJAR
变量值为您上传新 jar 的文件名,如:Server-2.9.x.jar
--replace-import-h2-sql=/xxxx.sql --transform-sql
(路径需要替换为第二步控制台输出的 sql 文件保存路径)sh /xxxx/Server.sh restart --replace-import-h2-sql=/xxxx.sql --transform-sql
Import successfully according to sql,/xxx/xxx/db/backup/xxxx.sql
字样表示升级成功并自动启动程序答:非必须,因为 2.8.24+ 新增了命令行方式备份数据,这样在程序未启动前就将所有数据备份导出为 sql 保证导出的数据是最新并且完整的。 如果您不想升级到 2.8.24+ 再升级到 2.9.x 那么可以先用管理身份登录进入系统进入:【系统管理 -> 数据库备份】页面里面去创建一个全量备份记住备份文件完成路径
注意:不通过命令行备份不能保证导出的备份数据一定是最新的奥,因为程序在运行中随时会产生新数据或者数据更新情况
答:备份列表中状态列后面有一个复制按钮,点击一下就复制到粘贴板啦
sh /xxxx/Server.sh restart --backup-h2
不生效该怎么办?答:如果你是从很早就使用了 Jpom 那么你现在管理服务端当脚本不是最新当,最新的管理脚本里面将执行命令的其他参数也传入了启动程序里面
解决办法有:
ARGS
变量最后添加一个 $@
即可
ARGS="--jpom.applicationTag=${Tag} --spring.profiles.active=pro --server.port=2122 --jpom.log=${Path}log $@"
答:没有的,因为 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 路径
答:有
java -jar server-2.8.24.jar --spring.profiles.active=pro --backup-h2
java -jar server-2.9.0.jar --spring.profiles.active=pro --replace-import-h2-sql=/xxxx.sql --transform-sql
RUNJAR
变量值为:server-2.9.0.jar
注意:
答:升级流程和 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。
只要您在使用过程中没有发现部分功能异常,无法使用,接口 404 等情况下,插件端不及时更新也是没有太多问题的。
插件端和服务端版本差异请尽量一致或者缩小,避免出现部分功能调整后关联影响。
答:https://gitee.com/dromara/Jpom/attach_files
答:插件端还是可以使用以前到方式:手动上传 jar,在线升级等。推荐使用在线升级,可以在服务端页面批量升级插件端版本
官网: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/)