Spring Boot热部署
Spring Boot热部署
本文介绍关于idea中spring boot 热部署。
一、类加载器(ClassLoader)
- base classloader ,base类加载器,加载不改变的Class,例如第三方提供的jar包;
- restart ClassLoader restart 类加载器,加载正在开发的Class,即只加载有变更的Class,所以实现了较快的重启时间;
二、方式
springboot有3中热部署方式:
- 使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动
- 使用springloaded本地加载启动,配置jvm参数
- 使用devtools工具包,操作简单,但是每次需要重新部署
下面主要介绍第三种热部署方式
步骤:
1.在pom.xml中添加依赖
// devtools热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!--配置了true后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,
也就是如果有用户登陆的话,项目重启后需要重新登陆-->
<optional>true</optional>
<!--<scope>true</scope>-->
</dependency>
2.在application.properties中配置一下devtools
#关闭缓存,及时刷新
#spring.freemarker.cache=false #页面不加载缓存,修改即时生效
spring.thymeleaf.cache=true
#热部署生效
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=WEB-INF/**
3.IDEA中配置
当我们修改了类文件后,idea不会自动编译,得修改idea设置。
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + / ,选择Registry,勾上 Compiler autoMake allow when app running
配置完成,接下来就是测试了。
三、为什么重启很快
重启的时候只是加载了开发的Class,没有重新加载第三方的jar包。
devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制。