说明

热部署,指在修改了源码后在不重新启动服务把修改或新增的内容部署到服务器上。在开发的过程中可以避免重启服务浪费不必要的时间。

目前我们使用IDEA开发 Java 主要有两种架构的项目: 一种是传统的前后端一体项目,主要是使用Tomcat作Web服务器做启动的方式;一种是前后端分离的项目,主要使用SpringBoot框架,SpringBoot框架内嵌了Tomcat容器。

Tomcat热部署

首先,先创建一个Tomcat启动服务,点击选中

idea maven热部署设置 idea2021热部署_java

创建一个Tomcat启动服务

idea maven热部署设置 idea2021热部署_spring boot_02

配置好Tomcat的基本配置,实际上只需要配置Tomcat的安装路径,其他大部分默认即可

idea maven热部署设置 idea2021热部署_idea maven热部署设置_03

配置完成后,导入项目

idea maven热部署设置 idea2021热部署_idea maven热部署设置_04

选择要启动的项目,注意:这里要选择 exploded 

war模式:将WEB工程以包的形式上传到服务器 ;
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;

选择OK后回出现下面的项目

 

idea maven热部署设置 idea2021热部署_热部署_05

 接下来就可以设置热部署了

注意: 有时候发现没有上面的选项,原因是因为你在Deployment的选项中使用的是先将工程打成war包然后再去运行的

idea maven热部署设置 idea2021热部署_idea maven热部署设置_06

 这里的更新可能会延迟,如果觉得频繁并卡顿,我们也可以使用手动更新

SpringBoot热部署

在2021.3版本的 Idea 使用SpringBoot热部署需要导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

然后重启服务即可,默认是手动编译,按照下图点击,或者直接使用快捷键Ctrl + F9

只要classpath 路径下的文件发生了变化,项目就会自动重启

idea maven热部署设置 idea2021热部署_热部署_07

 当然也可以使用IDEA的自动编译功能,在Settings中勾选上下图两个勾即可。

idea maven热部署设置 idea2021热部署_idea maven热部署设置_08

 

idea maven热部署设置 idea2021热部署_spring boot_09

 SpringBoot中使用的自动重启技术使用了两个类加载器,一个 是baseclassloader,用来加载不会变化的类,例如项目引用的第三方的jar;另一个是restartclassloader,用来加载开发者自己写的会变化的类。当项目需要重启时, restartclassloader将被一个新创建的类加载器代替,而baseclassloader则继续使用原来的,这种启动方式要比原来的启动快很多,因为baseclassloader 已经存在并且已经加载好。