对服务的调整都需要重启系统,重启系统会带来4个问题
一般来说,有如下几种方法可以热发布代码
| 方法 | 描述 | 用于生产 |
|---|---|---|
| 动态脚本 | 使用动态脚本,表达式引擎,比如Groovy,JRuby。这在8.2中已经说明 | 可以 |
| ClassLoader | ClassLoader 加载新的代码,像早期修改JSP立即生效,或者在应用服务器上重新部署JavaEE App采用此技术。 | 可以 |
| 重定义方法体 | JVM支持重定义方法体,比如使用Arthis可以热发布方法体。此方法不适合类的修改,如方法签名修改,类增加成员变量 | 可以 |
| DceVM | 修改JVM实现,能让JVM不受限制重新定义Class,包括新增方法,修改类继承关系等。这种方法的JVM被修改过,因此只能自担风险,目前国内有大规模公司在非生产环境实践使用DCEVM。Jetbrain提供了JDK17的DCEVM 虚拟机用于调试。DCEVM比较完美解决了热发布问题,不过还没有国内用于生产的案例。 | 国内未有大规模色生产验证。 |
| Spring Loaded | 它实现热发布原理较为复杂,大致是系统启动过程,类加载JVM的时候,它字节码扫描,将对此目标动态的类的方法和属性调用字节码,转化成一个代理类调用字节码,此代理类内部调用真正的目标类。当目标类更新时候,代理类转向调用更新的类。由于加了代理层,实际系统的调用都变成代理类调用。因此此方式不适合生产系统,仅用于调试 | 不能 |
这些方法各有优缺点,比如动态脚本只能热发布限定的业务逻辑,如果非脚本部分需要修改则没有办法。这些方法除了DceVM能几乎不受限制的(包括对依赖的jar,比如fastjson)进行热不发,但在生产上还未得到充分验证。没有得到大厂验证原因有两个,1是不符合发布流程,2是没有厂商和运维承担热发布失败的责任
",DeepSeek Harness本地安装与启动指南
DeepSeek Harness五大实用插件:作用与安装方法详细说明
小米路由器4a千兆版和小米路由器4的主要区别是什么(小米路由器4a千兆版和小米路由器4的主要区别一览)
速看!Apache DolphinScheduler 满足企业刚需,Email 告警设置全解析
AI Agent 接入 Zvec (一):MCP 篇
一行命令搞定驱动安装!MicroPython 开发有了自己的 “PyPI”包管理平台!