寻找一个 Java 应用本地更新方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qjbcnrs
V2EX    程序员

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

  •  
  •   qjbcnrs 2022-04-01 11:55:16 +08:00 2577 次点击
    这是一个创建于 1369 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2022-04-02 09:16:53 +08:00
    现在暂时使用 shell 脚本。jar 启动后,检查进程是否启动,进程未启动或启动后接口无法访问,直接回滚 web 和 mysql 。输出回滚日志,判断没成功就推送日志到飞书通知,再手动看啥原因,再下发新的回滚脚本。人工运维的方法。
    22 条回复    2022-04-02 22:00:40 +08:00
    qfdk
        1
    qfdk  
    PRO
       2022-04-01 14:15:29 +08:00 via iPhone
    哈哈哈 shell 更新….
    letitbesqzr
        2
    letitbesqzr  
       2022-04-01 14:50:23 +08:00
    打包成 docker ,方案就比较多了..
    wxy1991
        3
    wxy1991  
       2022-04-01 16:04:43 +08:00
    你们公司没有测试吗。。。
    C02TobNClov1Dz56
        4
    C02TobNClov1Dz56  
       2022-04-01 17:31:27 +08:00
    没有测试环境?
    LoNeFong
        5
    LoNeFong  
       2022-04-01 18:20:17 +08:00
    准备数据库 up down 脚本 出问题好及时回滚
    工控机安装 docker 也不现实 看来只能 scp 了
    qjbcnrs
        6
    qjbcnrs  
    OP
       2022-04-01 18:32:19 +08:00
    @wxy1991 测试归测试啊,毕竟机器不在我们这边,啥情况都有可能。肯定要考虑启动失败的情况
    qjbcnrs
        7
    qjbcnrs  
    OP
       2022-04-01 18:33:15 +08:00
    @LoNeFong scp 也不太可能,没有公网 ip ,也不允许外网映射。所以只能程序自己检测并自动更新
    tuboshuv1
        8
    tuboshuv1  
       2022-04-01 21:21:47 +08:00
    其实保证数据库更新不出错就可以了。应用开始更新的时候,就给中央服务器发通知,执行状态什么的。然后每走一步就仔细校验,错了立马暂停。这种情况的更新不可能没人值守的
    anyele
        9
    anyele  
       2022-04-01 23:56:14 +08:00
    难点是数据库更新, 要保留回滚的措施
    night98
        10
    night98  
       2022-04-02 01:14:01 +08:00
    linux cron 每天晚上 3 点定期拉取 docker hub latest 镜像并重启,java 服务打包成 docker 镜像,内置一下 flyway ,最好买个 flyway 的授权
    qjbcnrs
        11
    qjbcnrs  
    OP
       2022-04-02 09:12:12 +08:00
    @night98 工控机不能装 docker 。内存不够。
    zzh7982
        12
    zzh7982  
       2022-04-02 10:02:11 +08:00
    @zhongjun96 内存不够那为啥用 java 不用 go 呢
    qjbcnrs
        13
    qjbcnrs  
    OP
       2022-04-02 10:17:49 +08:00
    @zzh7982 因为我不会 go
    zzh7982
        14
    zzh7982  
       2022-04-02 11:09:31 +08:00
    @zhongjun96 学啊
    zzh7982
        15
    zzh7982  
       2022-04-02 11:10:23 +08:00
    @zhongjun96 好像你 java 多会一样( dog
    aptupdate
        16
    aptupdate  
       2022-04-02 11:32:18 +08:00
    机器多大内存? docker 自身不会占用很多内存的。
    gitdoit
        17
    gitdoit  
       2022-04-02 11:37:06 +08:00
    别更表了, 直接建新库, 在新库上更新表结构,同步数据; 执行成功了 把数据源切过去
    sky857412
        18
    sky857412  
       2022-04-02 12:02:19 +08:00
    你需要再写一个监控程序,负责更新。监控程序,集成 web shell 的功能,让客户再给你们开个跳板机,做运维。这样虽然麻烦一点,但是靠谱一点
    AItsuki
        19
    AItsuki  
       2022-04-02 12:56:23 +08:00 via Android
    建议还是上 Docker ,并且用 compose 配置,占不了多少内存的,java 你可以选择使用 openj9 版本。
    qjbcnrs
        20
    qjbcnrs  
    OP
       2022-04-02 14:11:02 +08:00
    @aptupdate 只有 4G 。还要装 mysql ,nginx
    git00ll
        21
    git00ll  
       2022-04-02 19:07:41 +08:00
    写代码时,尽量保证数据库兼容性。
    如加字段这种可以兼容的改动,失败代码回滚后不影响。
    如修改字段,删除字段这种改动,可分多次代码迭代实现,如增加字段取代旧的,然后再删除旧的。
    night98
        22
    night98  
       2022-04-02 22:00:40 +08:00
    4G 内存够够的,java1g ,mysql1g ,nginx0.5g ,完美
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5141 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:17 PVG 17:17 LAX 01:17 JFK 04:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86