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文件,保存后,直接刷新浏览器就可以看到修改后的效果了。