Java 是不是没有好的热部署方案?

2019-07-24 09:46:43 +08:00
 StarkWhite

像 Node,PHP 推代码到服务器就行了,Java 每次打 jar/war 包、停止旧服务、启动新服务,挺麻烦的,从启动到能访问还得等几分钟。

17199 次点击
所在节点    Java
118 条回复
StarkWhite
2019-07-24 10:13:35 +08:00
@chendy 反向代理+脚本 看起来可行,只是写脚本太麻烦了,还有重启服务后状态会丢啊。

k8s 那一套太重了,还不如手动部署。。。
StarkWhite
2019-07-24 10:15:39 +08:00
@liangkang1436 感谢,但是 jrebel 官网打不开,蜜汁尴尬
lastpass
2019-07-24 10:16:07 +08:00
@StarkWhite #19 依靠 idea 和 jvm 的支持呀。首先 ssh 连接到远程服务器,配置 remote tomcat。tomcat 配置 jmx remote 开启远程调试。最后 idea 配置 automatic upload 以推送资源文件。
lihongjie0209
2019-07-24 10:16:29 +08:00
类似这种问题, 你可以问一下 windows 团队为什么更新需要重启
notreami
2019-07-24 10:18:36 +08:00
类比 Node,PHP 的话,springboot 的 devtools 就可以了,监听某个目录下的文件,有变化就重新加载运行。
稳定点的话,使用模块化方式,比如 osgi、Jigsaw、Guice 等等,但是这些都太麻烦,对开发方式影响太大。
crayhuang
2019-07-24 10:33:35 +08:00
jrebel+1
szq8014
2019-07-24 10:37:07 +08:00
想直接发布代码也没人有阻止呀~比如 maven 项目,就可以直接在服务器更新代码然后再 package 再 run。 [此处需要加狗头]
redford42
2019-07-24 10:37:25 +08:00
不然 Java 图标为什么是一杯咖啡呢
Raymon111111
2019-07-24 10:47:02 +08:00
答案是 是

没有简便的解决方案

jvm 特性导致的
rockyou12
2019-07-24 10:52:07 +08:00
单机 java 又是个人项目最好就别搞灰度了,费力不讨好。用 nginx 其实也不算简单,要你本地新旧两个服务用不同端口,然后 upstream。

k8s 的 deployment 发布已经是最省事的灰度发布了,如果机器不够真的不如不做
Infernalzero
2019-07-24 10:57:43 +08:00
楼上也很多人说了,这个没有彻底的解决方案,jvm 特性导致
只能是想办法减少启动时间,这里主要分两块,一块是 JIT 导致的,只能像阿里那样从 jvm 层面去改
还有一块是 spring 导致的,因为 spring 的依赖注入,创建 bean 和扫描非常耗时,所以使得 java 应用启动更慢,这个目前业界的思路是把依赖注入放到编译构建阶段去做,对应的框架是 micronaut,但是这个要取代 spring 有点困难。
qiyuey
2019-07-24 11:04:54 +08:00
热部署一定是需要的吗?
passerbytiny
2019-07-24 11:10:03 +08:00
“类似这种问题, 你可以问一下 windows 团队为什么更新需要重启” —— lihongjie0209

纵观楼主的回复,还是这个最接近答案,其他人可以散了。
fivesmallq
2019-07-24 11:10:46 +08:00
你可以试试 play 1.x https://www.playframework.com/documentation/1.5.x/home

支持热部署,springboot 的 devtools 太 low 了,实际上还是重启。

不过这个特性不建议生产环境使用
Takamine
2019-07-24 11:25:17 +08:00
devtools。
mineqiqi
2019-07-24 11:32:58 +08:00
分布式的项目可以平滑过渡升级,但是并不是热部署
StarkWhite
2019-07-24 11:40:24 +08:00
@redford42 意思应该先自己冲一杯咖啡,然后在慢慢喝,喝完了可以瞄一眼进度?/滑稽
StarkWhite
2019-07-24 11:41:36 +08:00
@mineqiqi 没钱啊,个人小项目上分布式,得买几台服务器,而且运维麻烦
luckyrayyy
2019-07-24 11:42:56 +08:00
nginx or docker
lihongjie0209
2019-07-24 11:44:02 +08:00
@StarkWhite #38 没必要上分布式, 只用多节点就可以了. 一台服务器部署两个一样的应用, 监听不同的端口, nginx 做负载就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX