Fork me on GitHub

IDEA SpringBoot 热部署

参考文献:

https://blog.csdn.net/qq_42685050/article/details/81588584

https://juejin.cn/post/6844904121821036552

https://blog.csdn.net/lisheng19870305/article/details/94620716

 

近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

这里我没有把所有的方式都尝试一遍,只是使用了devtools的方式

总的来说,一共需要两个步骤:

第一步、先设置我们的pom.xml文件,加入依赖

首先是把下面代码在<dependencies>中

<!--添加热部署-->
 
<dependency>
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-devtools</artifactId>
 
<optional>true</optional>
 
<scope>true</scope>
 
</dependency>

  

 

另外下面的代码是放在<build>  下面<plugins>里的

<plugin>
 
<!--热部署配置-->
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-maven-plugin</artifactId>
 
<configuration>
 
<!--fork:如果没有该项配置,整个devtools不会起作用-->
 
<fork>true</fork>
 
</configuration>
 
</plugin>

  

第二步、设置IDEA的自动编译:

(1)File-Settings-Compiler勾选 Build Project automatically

(2)快捷键 ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

这样我们的热部署就完成了,可以再我们的项目中修改返回值,或者修改Mapping的value值后,在我们的页面中刷新试试,

我们的修改已经生效了,不用通过再关闭再开启项目查看了。


spring-boot-devtools 介绍

  • spring-boot-devtools 是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。

  • spring-boot-devtools 可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是 spring-boot-devtools 会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。

  • 由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。

配置热部署

  • 在 pom.xml 文件中,添加项目 spring-boot-devtools 依赖
<!--热部署依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
 </dependency>

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!--没有该项配置,热部署不会起作用-->
    <configuration>
        <fork>true</fork>
    </configuration>
 </plugin>

  

  • 在资源文件 application.properties 中进行热部署的相关配置
# 页面修改后立即生效,关闭缓存,立即刷新
spring.thymeleaf.cache=false
# 热部署生效
spring.devtools.restart.enabled=true
# 设置需要重启的目录
spring.devtools.restart.additional-paths=src/java/main
# 设置不需要重启的目录
spring.devtools.restart.exclude=static/**,public/**,WEB-INF/**
# 为 mybatis 设置,生产环境可删除
# restart.include.mapper=/mapper-[\\w-\\.]+jar
# restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

  

 

当热部署搭建完成后,程序只要启动一次即可,后面修改代码时,只需保存后便可以触发热部署机制,自动重启服务。

设置 IDEA 环境自动编译

在使用 IDEA 编译器时,需要设置自动编译。

  • 在编译器选项中勾选 Build project automatically 选项

 

 

  • 使用快捷键:Ctrl + Alt + Shift + / 调出 Registry 窗口,勾选 compiler.automake.allow.when.app.running 选项

 

 

源码地址

springboot-devtools


具体步骤

一、开启IDEA的自动编译(静态)

具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。

二、开启IDEA的自动编译(动态)

具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。

  • compiler.automake.allow.when.app.running -> 自动编译
  • compile.document.save.trigger.delay -> 自动更新文件

PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!

三、开启IDEA的热部署策略(非常重要)

具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。

image.png

四、在项目添加热部署插件(可选)

温馨提示:
如果因为旧项目十分臃肿,导致热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行免启动快速更新!!

具体步骤:在POM文件添加热部署插件

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

  

五、关闭浏览器缓存(重要)

打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。

 

 

posted @ 2020-11-23 10:40  stardsd  阅读(2836)  评论(0编辑  收藏  举报