文章目录
背景
Spring Boot 提出了多项开箱即用的功能特性,但归根到底还是围绕简化应用的创建、开发、运行。开发环境下我们经常对项目代码进行变动,如果每次都重新启动应用会浪费我们大量时间,为此就产生了多种进行热部署的方案,可以在不重启的情况下使用新的代码。
spring-boot-devtools
如何使用spring-boot-devtools
Spring Boot 通过 Maven 插件 spring-boot-devtools 提供对热部署的支持,只要将这个依赖添加到类路径,当类路径下的 class 发生变化时就会自动重启应用上下文,从而使用新的 class 文件中的代码。这个插件的坐标如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
引入依赖时指定 optional 避免依赖传递,同时 spring-boot-maven-plugin
打包时也会忽略 spring-boot-devtools
插件。
spring-boot-devtools 功能特性
spring-boot-devtools 作为一个开发环境的插件,不仅支持热部署,具体来说有以下特性。
- 将第三方库(如 thymeleaf、freemarker)缓存相关的属性配置到 Environment,以便开发环境禁用缓存。
- 类路径下的 class 文件发生变更时触发 ApplicationContext 重启。
- 内嵌 LiveReload 服务器,资源发生变化时触发浏览器刷新。
- 支持全局配置,所有的 Spring Boot 应用的 spring-boot-devtools 插件使用同一套配置,如指定检查 class 文件变化的轮训时间。
- 支持远程触发热部署(不推荐使用,一般都没什么机会用到)。
JRebel(推荐)
使用方法:
安装
在IDEA中,安装JRebel的插件
激活JRebel
选择 Team URL,在 https://jrebel.qekang.com/ 网站可以查找 可用的 Team URL,然后输入任意邮箱即可激活。
这里我输入了自己的邮箱
激活后要点击右下角的enbale to project按钮。如果没选的话,点击JRebel的调试启动按钮也会提醒你一次。
开启JRebel对项目的支持
勾选项目名称右侧的第一个复选框即可快速开启 JRebel 对项目的支持。此时将在 resources 目录下生成一个 rebel.xml 文件,这个文件用于配置 JRebel 监听的类路径。
注:如果启动了项目之后勾选的话,记得要重新启动整个项目才能开启。
修改自动编辑设置
访问 Setting,在 Compiler 页面下勾选 Build project automatically 开启自动构建功能。
保存文件设置
访问 Setting 页面,在 System Settings 页面下勾选 Save file if the IDE is idle for。
这里一定要选择自动保存,手动保存似乎没办法触发热部署
启动项目
要使用这个按钮进行debug启动,而不是之前的debug按钮
缺点
由于我使用的Mybatis,每次当我改了xml文件的时候,都必须重启整个项目,因为热部署插件仅仅是替换了class文件。