什么是热部署?
比如在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动后的效果,经常需要重启启动类来查看改变的效果,否则将不能看到新增代码的效果,这一过程很多时候是非常浪费时间的,导致开发效率极低。这个时候热部署就可以在改动代码的时候自动实现项目的重启并部署,有效地提高了开发调试的效率
spring-boot-devtools热部署的原理
spring-boot-devtools是一个为开发者服务模块,其中最重要的功能就是自动实现更新的应用代码更改到最新的应用上
这个模块的工作原理就是在发现代码有更改之后,自动重新启动应用,但是速度比手动停止后再启动要更快。
其更深层原理是使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(例如第三方jar包),另一个ClassLoader加载会更改的类,称为RestartClassLoader。这样在有代码更改的时候,原来的Restart ClassLoader就会被丢弃,重新创建一个Restart ClassLoader加载更新的类,但是往往需要加载的类比较少,所以才会有上面那句速度比手动停止后再启动要更快。
使用spring-boot-devtools进行热部署
在pom.xml文件中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
还需要在插件中添加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--如果没有这个配置,热部署不会起作用,也不会restart-->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
application.properties配置
#热部署
#设置开启热部署
spring.devtools.restart.enable = true
#页面不加载缓存,修改及时生效
spring.freemarker.cache = false
编写一个Controller类
@Controller
public class HelloController{
@RequestMapping("/")
@ResponseBody
public String index(){
return "SpringBoot热部署";
}
}
直接启动启动类,访问 localhost:8080/ 可以看到页面显示了我们return的内容
然后我们修改一下return的内容
@Controller
public class HelloController{
@RequestMapping("/")
@ResponseBody
public String index(){
return "SpringBoot热部署了";
}
}
这时候不用再次启动了,直接访问 localhost:8080/ 就可以,即使是新建一个Controller、修改配置文件也可以做到热部署