SpringBoot的热部署有两种方式:
①springloaded
②spring-boot-devtools
一、springloaded方式(本地实验失败)
步骤:
(1)、在pom文件中添加依赖包:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin </artifactId>
<dependencies>
<!--springloaded hot deploy -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
(2)、在Maven启动方式中使用spring-boot:run 来启动项目。
但是这么做会有个缺点:当在eclipse中关闭项目时,实际上并不会关闭进程,要在任务管理器中将进行进程关闭才可以重新启动。
解决办法:把Spring-loader-1.2.4.RELEASE.jar下载下来,放到项目lib目录中,然后在app启动项右键run as中的配置中 添加
-javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify
命令。然后启动就可以解决问题。
尽管如此,但是springloaded方式还有个缺点:当我们往类里面添加新的方法的时候,热部署会失败。于是引入第二种方法:spring-boot-devtools
实验失败尝试解决手段:
修改Maven配置文件,将jdk版本设置为1.8(无效)
检查是否开启自动编译(已开启,无效)
检查是否书写错误(检查无效)
原因不明。。。。。。
二、spring-boot-devtools
介绍:spring-boot-devtools是一个为开发者服务的模块,其中最重要的功能是自动应用代码更新到最新的app中。原理是在发现代码有改变之后,重新启动应用,但是速度比手动停止后再启动要快,快的原因并不是节省了手动操作的时间,其深层原理如下。
原理:spring-boot-devtools使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(第三方jar包),另一个ClassLoader加载会改变的类,称为restar ClassLoader,这样在代码更改的时候,原来的restar ClassLoader被丢弃,重新创建一个新的 restarClassLoader,由于加载的类更少,所以实现了较快的启动速度(5S内)。
说明:
①devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。
②devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在allication.properties文件中配置spring.thymeleaf.cache=false来实现(注意这里不同的模版配置不一样))。
③
修改类-->保存:会重启
修改配置文件-->:会重动
修改页面-->:会重启,页面会刷新(spring.thymeleaf.cache=false时有效)
步骤:
(1)、添加依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
(2)、添加spring-boot-maven-plugin:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
三、spring-boot-devtools热部署失败常见问题:
①对应的spring-boot版本是否正确,这里使用的是1.4.1版本;
②是否加入plugin以及属性<fork>true</fork>
③Eclipse Project 是否开启了Build Automatically(我自己就在这里栽了坑,不 知道为什么我的工具什么时候关闭了自动编译的功能)。
④如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。