一、概念

热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效。热部署为了解决的问题有两个, 一是在开发的时候,修改代码后不需要重启应用就能看到效果,大大提升开发效率;二是生产上运行的程序,可以在不停止运行的情况下进行升级,不影响用户使用。

二、idea开启热部署

当前流行的java程序主要有两种,第一种是传统的Web应用,依赖Tomcat这种web容器运行;第二种是Spring boot程序, 内嵌了运行环境。

2.1 Tomcat热部署

a). 在顶部找到程序运行操作栏, 点击Edit Configurations

image-1658237903156

b). 点击你要配置的tomcat,点击deployment,点击”+“

image-1658237968082

c). 然后选择你要部署的war包,热部署必须要选择带有exploded的war包

___:war exploded
  展开部署(相当于将资源文件进行展开后进行部署)
___:war
  发布模式,这是先打成war包,再部署

1658237996274
1658238015821(1)

d). 再切换回Server,按照下图标注配置

1658238046430
配置完后点击ok即可启动你的tomcat,然后改一下jsp、java文件实验热部署配置是否成功。
最后提示一下,Idea热部署并非绝对实时, 还是会有延时的,假如你手速快的话可能会出现改了并没有马上生效。所以此时不要怀疑热部署没有配置成功,稍微等一会你会看到开发工具左下角会有一个class reload的提示,出现这个提示才说明已经热部署完成了。
如果你想马上生效的话,可以使用快捷键Ctrl + F10

e). on update action 与 on frame deactivation 热部署方式

on update action
顾名思义触发 update 时,执行以下哪种动作
update resources —- 更新静态的资源,比如 html,js,css 等 运行模式和调试模式都是立即生效。
update classes and resources —- 更新 java,jsp 和静态资源(
1. Java 修改后,会被编译成。class 然后覆盖到 target/kao 文件夹下,IDE 调试模式的情况下,立即生效。IDE 运行模式下,不立即生效,需要 redeployed 才可生效。
2. JSP 修改后,再次被访问的时候,会自动更新,重新编译成.java—->.class 保存在 Tomcat 的 work 目录下。由于是访问时才检测是否修改,是否需要重新编译,所以 IDE 运行模式 和 IDE 调试模式下,都是立即生效。刷新下页面就可);
redeployed —– 重新部署,发布到 Tomcat 里,不重启 Tomcat,而是把原来的删掉,然后重新发布;
restart server —– 重启 Tomcat

on frame deactivation
顾名思义 IDEA 窗口失去焦点时,触发以下哪种动作
Do nothing ——— 什么都不做
update resources —- 更新静态的资源,比如 html,js,css 等 运行模式和调试模式都是立即生效。
update classes and resources —- 更新 java,jsp 和静态资源 同上

on frame deactivation 默认也是 do nothing,不然你每次切个窗口,都会更新
值得注意的是,类似于 application 这种配置文件应该是不会更新,需要重新部署才能生效

2.2 Spring boot程序热部署

image-1658238116210
配置完后点击ok即可启动你的程序,java文件实验热部署配置是否成功。
但配置到这里只是会使java文件和其他静态资源热部署成功,但如果您的Spring boot程序是web程序,并且有jsp或Thymeleaf等页面模板引擎,则还需要在Spring boot的配置文件中配置。
如果是jsp, 在application.yml文件下加入配置
image-1658238156095
如果是Thymeleaf, 则在application.yml文件加入spring:thymeleaf:cache: false 配置
Spring boot程序除了通过上述步奏实现热部署,还可以通过给程序添加spring-boot-devtools依赖实现。

<!-- 热部署 --> 
<dependency> 
    
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId> 
    <version>2.0.4.RELEASE</version> 
    
    <!-- 启用 --> 
    <optional>true</optional> 
</dependency>

三、其他配置

如果你通过上面的步骤还没实现想要的热部署效果,可以继续做以下两个配置
3.1 开启Java Compiler的自动build
1658238321210(1)
3.2 如果是2021以前idea版本:文件空白处点击Alt+Ctrl+Shift+/ 快捷键 选择弹框中的Registry弹出如下弹框,直接输入when.app.running 选中对应选项。
image-1658238360948
3.3 如果是2021版idea的话:在下图位置选中自动修改选项
image-1658238509761

Q.E.D.