一、前言

  1. 每次修改完java文件或者thmeleaf模版文件后,需要重新编译 rebuild 才能生效,这就显得很麻烦了。
  2. spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。
  3. spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。
  4. 原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动更快。
  5. 其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
  6. 即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机)

二、IDEA自动编译设置

  1. File-Settings-Compiler-Build Project automatically
    图片描述
  2. ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running
  3. compile.document.save.trigger.delay -> 自动更新文件, 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!

    图片描述

  4. 顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新
    图片描述

三、pom.xml中添加热部署依赖及application.proerties配置

  1. 在dependency中添加devtools依赖

           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-devtools</artifactId>
               <optional>true</optional>
               <scope>runtime</scope>
           </dependency>
  2. plugin中配置configuration

       <build>
           <plugins>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                   <!--以下fork为true必须添加-->
                   <configuration>
                       <fork>true</fork>
                       <addResources>true</addResources>
                   </configuration>
               </plugin>
           </plugins>
       </build>
  3. 在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。
  4. 在SprintApplication.run之前调用System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全关闭重启支持
  5. 配置内容:

    #热部署生效
    spring.devtools.restart.enabled=true
    #设置重启的目录
    #spring.devtools.restart.additional-paths: src/main/java
    #classpath目录下的WEB-INF文件夹内容修改不重启
    spring.devtools.restart.exclude: WEB-INF/**

四、测试

  • 修改类–>保存:应用会重启
  • 修改配置文件–>保存:应用会重启
  • 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)

五、参考链接

https://liuyanzhao.com/7105.html
https://www.cnblogs.com/lspz/...

六、IDEA+Springboot+JRebel插件热部署实现

  1. 除了使用devtools实现热部署功能,还可以安装JRebel插件来实现热部署
  2. 参考链接:
    https://www.jianshu.com/p/bdc...
    https://www.cnblogs.com/code-...
    https://www.cnblogs.com/qwang...
  3. JReble插件激活破解方式:
    https://blog.csdn.net/xingbao...

繁星落眼眶
626 声望54 粉丝