热更新(HotSwap)可以在 Java 程序运行时,更新部分 class 文件,而无需重启应用。应用观测器的热部署组件支持一键将编辑器中修改的 Java 源码快速编译,并更新到远端应用服务中,免去构建、打包和重部署的过程,帮助开发者快速验证修复方案的有效性。
适用场景
将编辑器内修改的 Java 源代码更新到远端应用里,快速验证修复方法的有效性,而免去耗时的构建、集成和部署过程;
对于本地无法搭建运行环境的应用,可以结合应用观测和热部署功能实现远程调试和修复验证。
前提条件
部署的目标主机必须安装 JDK 且必须存在 ${JAVA_HOME}/lib/tools.jar 文件;
本地可以通过 SSH 连上目标应用所在的目标主机(暂不支持跳板机);
启动 Java 进程的用户和 SSH 远程连接的用户需要保证一致;
更新至 Alibaba Cloud Toolkit for IDEA 2021.12.2 之后的版本,且需要选择 SSHj 作为 SSH 客户端。
使用步骤
1. 进行热部署,首先需要连接目标主机和目标进程,有两种方法可以唤出建立连接对话框。
方法一
在未连接的情况下右击源码文件后,选择“热部署”(如果已经建立连接,则会热部署当前文件),通过本方法建立连接后,会直接提示是否热部署唤出菜单的文件。
方法二:
可以在应用观测器窗口中选择“热部署”标签页后,点击“连接进程”按钮。
2. 选择目标主机和目标进程后,点击连接。
3. 建立连接后,在想要热部署的源码文件上右击,选择“热部署”。
4. 部署成功的文件会显示在热部署工具窗口下方,点击名称可以跳转到对应源码文件,点击右侧按钮还原对应文件的全部修改。
不适用热部署的情况
类的继承关系、接口不能改变,包括添加、删除、修改或改变先后顺序等;
不能添加、删除、修改类字段、以及字段的访问控制符;
不能修改类字段的排列顺序;
不能增加、修改或删除方法签名、访问控制符,可以添加或删除 private static 或 private (static) final 方法;
Open JDK(jdk8u74-b02)之前的版本不能热部署包含 lambda 表达式的源码文件;
Open JDK(jdk8u74-b02)之后的版本热部署时,不能改变 lambda 表达式在源码文件中出现的顺序;
可以添加、删除或修改内部类,但要注意不要改变内部类首次被调用的顺序;
不能热部署增加、删除或修改闭包的源码文件。
后续正式版本将能够自动检测不能热部署的情况,并作出对应提示。
注意事项
热部署后,该源码文件中对应的应用观测点将无法捕获新的数据,需要重新添加;
热部署无法影响运行中的方法;
多人协作时,针对同一个文件的热部署会相互覆盖;
调试完成后请重新部署服务;
热部署编译使用 IntelliJ 项目配置中的 JDK,不使用服务器、编译机(若有)JVM 实例。
FAQ
1.是否可以多人一起使用该插件对同一服务热部署?
答:可以,但应避免多人对同一文件同时热部署,防止热部署代码互相覆盖导致版本混乱。
2.和 Arthas 一起使用会冲突吗?
答:本插件使用 Arthas 完成 retransform,所以 retransform 不会冲突。如果想要同时使用本插件和 Arthas,需要保证先启动插件并连接目标主机,然后查找 Arthas 监听的 Telnet 和 HTTP 端口号,并以这两个端口号启动 Arthas。
联系我们
Alibaba Cloud Toolkit(应用观测器)钉钉用户交流群(群号:34965379)