快捷搜索: 王者荣耀 脱发

SpringBoot使用DevTools实现热部署

在项目的开发中,当每次修改了后台代码后都需要重启服务,这样降低了开发效率。下面将介绍在SpringBoot项目中使用DevTools实现热部署。

spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。

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

1、添加DevTools模块

方法一:在创建SpringBoot项目时选择添加模块

方法二:pom.xml文件的配置

<!-- 引入DevTools热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

2、编辑application.yml配置文件

在application.yml配置文件中添加相关配置信息。

spring:
  devtools:
    restart:
      enabled: true  #设置开启热部署
      additional-paths: src/main/java #重启目录
      exclude: WEB-INF/**
  thymeleaf:
    cache: false #使用Thymeleaf模板引擎,关闭缓存

3、IDEA的相关设置

(1)菜单:File → Settings → Build, Execution, Deployment → Compiler

在右侧的选项中找到 Build project automatically 选项并勾选,如下图:

(2)快捷键 Ctrl + Shift + Alt + / ,点击Registry项。

然后找到 compiler.automake.allow.when.app.running 选项并勾选,如下图:

4、解决静态文件不更新的问题

当我们更改了静态文件(如:HTML页面)后,也希望刷新浏览器后能够看到修改效果。

(1)首先在application.yml配置文件中要关闭Thymeleaf模板引擎的缓存。

(2)设置SpringBoot容器。

将 On frame deactivation 选项设置为: Update classes and resources,如下图:

这样当我们修改了静态文件HTML文件,保存后,直接刷新浏览器就可以看到修改后的效果了。

经验分享 程序员 微信小程序 职场和发展