SpringBoot配置devtools实现热部署

文章大体引用:https://blog.csdn.net/chachapaofan/article/details/88697452


1、前言

在我们之前开发的时候,每次一修改代码,想看修改后的效果,就得将项目重启,要知道,重启一次项目是很花费时间的,特别是比较大型的项目,十分费时。在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。下面我们就看看对于简单的类修改的热部署怎么实现。

2、原理

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

3. 方式

springboot有三种热部署方式:

1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动

2.使用springloaded本地加载启动,配置jvm参数
-javaagent: -noverify

3.使用devtools工具包,操作简单,但是每次需要重新部署

下面我们就使用第三种方式来配置SpringBoot的热部署,因为这种方式比较简单方便。

4、配置步骤

在pom.xml添加以下依赖


        
            org.springframework.boot
            spring-boot-devtools
            true
            true
        

(1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.yml文件中配置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。
(2)配置了true后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。

在application.yml中配置一下devtools

spring:
  devtools:
    restart:
      enabled: true  #设置开启热部署
      additional-paths: src/main/java #重启目录
      exclude: WEB-INF/**
  freemarker:
    cache: false    #页面不加载缓存,修改即时生效

5、配置完的效果

修改类–>保存:应用会重启
修改配置文件–>保存:应用会重启
修改页面–>保存:应用不会重启,但会重新加载,页面会刷新

你可能感兴趣的:(SpringBoot配置devtools实现热部署)