springboot提供了热部署,所谓热部署就是当你修改了代码,不用重新启动服务器部署应用,而你只要重新编译一下当前项目,修改的代码就自动生效了,这样极大的节省了部署应用时间,对于开发体验还是有很大提升的,因为我们不用一修改了代码就部署应用,因为部署应用也是会花费很长时间的。在idea中点击如下按钮:
一种是利用SpringLoader插件,另一种是使用DevTools工具。
1、第一种使用SpringLoader插件
在pom.xml文件中导入如下插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
然后以spring-boot:run命令的方式启动应用。
springLoader的缺陷:springLoader只对java代码进行热部署处理,无法实时更新页面,也就是说它对页面无能为力。
注意:这种方式的缺点是springLoader热部署程序是在系统后台以进程的形式来运行的,当第二次运行时会报端口占用的异常,因此需要手动关闭该进程。关闭如下图所示进程:
2、第二种使用DevTools工具
修改pom.xml文件,添加如下依赖:
<!-- springBoot devtools的热部署 修改代码之后需要重新编译一下即可 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
热部署插件的原理:主要有两个类加载器:base classloader 和restart classloader。
base classloader用于加载那些不会变化的类,例如各种第三方依赖,而restart classloader用来加载那些变化的类,例如你修改了的类。
springboot中热部署的原理:当代码发生了变化时,base classloader不变,restart classloader被废弃了,被另一个restart classloader替代了。在整个过程中只是加载了变化了的类而不是全部重新加载,所以速度会更快。devtools中默认嵌入了livereload服务器,利用它可以实现静态资源的热部署。LiveReload可以在静态资源发生变化时自动触发浏览器更新,它支持Chrome、Firefox以safari。它就是一个插件只需要在Chrome浏览器或者Firefox浏览器添加一个插件就可以了。LiveReload是和浏览器的选项卡绑定在一起的,在哪个选项卡打开就在哪个选项卡生效。如果安装并且启动了LiveReload插件但是又不想使用则可以在springboot配置文件中添加spring.devtools.livereload.enabled=false
即可关闭静态资源的热部署加。
SpringLoader在部署项目时使用的是热部署的方式,而DevTools在部署项目时使用的是重新部署的方式。
原文:https://www.cnblogs.com/jasonboren/p/14743314.html