• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qjbcnrs
V2EX  ›  程序员

寻找一个 Java 应用本地更新方案

  •  
  •   qjbcnrs · Apr 1, 2022 · 3324 views
    This topic created in 1684 days ago, the information mentioned may be changed or developed.

    公司采用工控机整机交付客户。机器上运行 jar 包+Mysql 数据库+web 应用。机器能访问外网。 如何更新这些应用? 目前考虑采用 shell 更新。更新 jar->更新数据库结构->启用 jar->更新 web 。 但是万一 jar 更新失败或者启动失败,需要回滚数据库及 web 。也无法保证回滚成功。 对这种问题,市面上有什么现成的解决方案吗?

    Supplement 1  ·  Apr 2, 2022
    现在暂时使用 shell 脚本。jar 启动后,检查进程是否启动,进程未启动或启动后接口无法访问,直接回滚 web 和 mysql 。输出回滚日志,判断没成功就推送日志到飞书通知,再手动看啥原因,再下发新的回滚脚本。人工运维的方法。
    22 replies  •  2022-04-02 22:00:40 +08:00
    qfdk
    qfdk
    PRO
    Apr 1, 2022 via iPhone
    1
    哈哈哈 shell 更新….
    letitbesqzr
    letitbesqzr
    Apr 1, 2022
    2
    打包成 docker ,方案就比较多了..
    wxy1991
    wxy1991
    Apr 1, 2022
    3
    你们公司没有测试吗。。。
    C02TobNClov1Dz56
    C02TobNClov1Dz56
    Apr 1, 2022
    4
    没有测试环境?
    LoNeFong
    LoNeFong
    Apr 1, 2022
    5
    准备数据库 up down 脚本 出问题好及时回滚
    工控机安装 docker 也不现实 看来只能 scp 了
    qjbcnrs
    qjbcnrs
    OP
    Apr 1, 2022
    6
    @wxy1991 测试归测试啊,毕竟机器不在我们这边,啥情况都有可能。肯定要考虑启动失败的情况
    qjbcnrs
    qjbcnrs
    OP
    Apr 1, 2022
    7
    @LoNeFong scp 也不太可能,没有公网 ip ,也不允许外网映射。所以只能程序自己检测并自动更新
    tuboshuv1
    tuboshuv1
    Apr 1, 2022
    8
    其实保证数据库更新不出错就可以了。应用开始更新的时候,就给中央服务器发通知,执行状态什么的。然后每走一步就仔细校验,错了立马暂停。这种情况的更新不可能没人值守的
    anyele
    anyele
    Apr 1, 2022
    9
    难点是数据库更新, 要保留回滚的措施
    night98
    night98
    Apr 2, 2022
    10
    linux cron 每天晚上 3 点定期拉取 docker hub latest 镜像并重启,java 服务打包成 docker 镜像,内置一下 flyway ,最好买个 flyway 的授权
    qjbcnrs
    qjbcnrs
    OP
    Apr 2, 2022
    11
    @night98 工控机不能装 docker 。内存不够。
    zzh7982
    zzh7982
    Apr 2, 2022
    12
    @zhongjun96 内存不够那为啥用 java 不用 go 呢
    qjbcnrs
    qjbcnrs
    OP
    Apr 2, 2022
    13
    @zzh7982 因为我不会 go
    zzh7982
    zzh7982
    Apr 2, 2022
    14
    @zhongjun96 学啊
    zzh7982
    zzh7982
    Apr 2, 2022
    15
    @zhongjun96 好像你 java 多会一样( dog
    aptupdate
    aptupdate
    Apr 2, 2022
    16
    机器多大内存? docker 自身不会占用很多内存的。
    gitdoit
    gitdoit
    Apr 2, 2022
    17
    别更表了, 直接建新库, 在新库上更新表结构,同步数据; 执行成功了 把数据源切过去
    sky857412
    sky857412
    Apr 2, 2022
    18
    你需要再写一个监控程序,负责更新。监控程序,集成 web shell 的功能,让客户再给你们开个跳板机,做运维。这样虽然麻烦一点,但是靠谱一点
    AItsuki
    AItsuki
    Apr 2, 2022 via Android
    19
    建议还是上 Docker ,并且用 compose 配置,占不了多少内存的,java 你可以选择使用 openj9 版本。
    qjbcnrs
    qjbcnrs
    OP
    Apr 2, 2022
    20
    @aptupdate 只有 4G 。还要装 mysql ,nginx
    git00ll
    git00ll
    Apr 2, 2022
    21
    写代码时,尽量保证数据库兼容性。
    如加字段这种可以兼容的改动,失败代码回滚后不影响。
    如修改字段,删除字段这种改动,可分多次代码迭代实现,如增加字段取代旧的,然后再删除旧的。
    night98
    night98
    Apr 2, 2022
    22
    4G 内存够够的,java1g ,mysql1g ,nginx0.5g ,完美
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1857 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    ♥ Do have faith in what you're doing.