spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。
devtools的原理
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
说明:
(1)devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),
实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的
(2)配置了后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。
PS:
这样配置完过后确实能够做到热部署,但是也有一些确定,1.项目较大之后,并没有节省多少时间,相反,每次修改代码都会自动重启,反而有些鸡肋。2.如果修改jar包之类的,也会比较麻烦。
当然这个功能是好的,我会继续优化。有好的方法之后会继续更新。大家有好的方案也可以提出来。
第一步:引入热加载的插件,springboot 1.3开始就有的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- 1
- 2
- 3
- 4
- 5
project 中添加spring-boot-maven-plugin,主要在eclipse中起作用,idea不需要加此配置,springboot 项目的话,应该是有此配置,加里面的内容即可。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
第二部 : idea设置(14版本)
1、点击: file ,Settings ,Build ,Execution,Deplment
然后记得apply,ok。
2、组合键:Shift+ALT+Ctrl+/ ,选择“Registry”,回车,找到“complier.automake.allow.when.app.running”
注意:
因为我的idea是14版本,有的15版本或者是更高的在compiler 里面是这样的:
,然后快捷键是Ctrl + Shift +A ,一样找到complier.automake.allow.when.app.running,点击勾选即可。
第三部: 如果你用的浏览器和我的一样,那么就禁用缓存
按F12(更多工具—->开发者工具),找到network,勾选Disable Cache。
亲测有效。
另外,如果是eclipse的话,直接在pom.xml文件当中添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- 1
- 2
- 3
- 4
- 5
参考:https://blog.youkuaiyun.com/qq_26346457/article/details/78819866
https://www.cnblogs.com/lspz/p/6832358.html