devtools工具包,操作简单,但是每次需要重新部署。
1、原理
深层原理是使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(第三方jar包),另一个ClassLoader加载那些会改变的类,成为restart ClassLoader,这样在有代码改变的时候,原来的restart ClassLoader会被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相对比较少,所以实现了较快的重启事件。
2、开始配置
(1)在pom.xml中添加依赖
<!--devtools热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
注意:
- devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动,并且会立即重启应用(当我们保存的时候)。因为采用的是虚拟机机制,该项重启很快
*配置了true后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登录的话,该项目重启后需要重新登录。 - 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
(2)devtools的配置
在application.yml中配置devtools
(3)Idea中的配置
当我们修改了类文件后,idea不会自动编译,得修改idea设置
- File-Settings-Compiler-Build Project automatically
- ctrl + shift + alt + /, 选择Registry打开,勾上Compiler autoMake allow when app running
(4)测试
修改类 -> 保存: 应用重启
修改配置文件 -> 保存:应用会重启
修改页面 -> 保存:应用不会重启,但会重新加载,页面会刷新