Spring Boot 安装开发者工具 spring-boot-devtools 后,可监听 classpath 下的文件修改并自动重启服务,这个功能对业务开发时效率提升明显。
spring-boot-devtools 使用了两个 classloader,一个用于加载第三方依赖的 class,另一个加载项目源码构建的 class,重启服务时只会销毁重建后者,所以重启速度较快。
但是很多时频繁候修改文件导致服务频繁重启,可能会导致 IDE 性能问题,出现卡顿现象,解决办法是将服务重启时机,由监听文件被修改后自动触发改为主动触发。Spring Boot 开发者工具提供了主动触发重启的机制,即监听对特定文件的修改(参考这里),这个“特定文件”通过下面配置指定。
spring.devtools.restart.trigger-file=.reloadtrigger
复制代码
上面 .reloadtrigger 需放在 classpath 搜索路径下,例如可以放在 resources 目录下。
src
+- main
+- resources
+- .reloadtrigger
复制代码
配置后,当需要触发重启时,只要修改下 .reloadtrigger 文件即可,例如 linux 下可以这样修改文件(手动编辑或其他方式均可,只要让文件内容发生变更)
echo $(date) > ./src/main/resources/.realoadtrigger
复制代码
上面代码放在一个脚本中,每次执行以下就可以触发 Spring Boot 服务重启了。
像 IDEA 这样的工具提供了重启操作,也是利用了上面的原理。在 VSCode 也可以实现类似的一键重启操作。方法是配置一个 Build Task(见下图),之后在 VSCode 中按 Shift+Command+B 组合键触发 Spring Boot 服务重启。
Build Task 配置
{
"version": "2.0.0",
"tasks": [
{
"label": "重启服务",
"type": "shell",
"command": "echo $(date) > ${workspaceFolder}/src/main/resources/.reloadtrigger",
"problemMatcher": [],
"presentation": {
// 静默执行,否则每次重启都会弹出输出面板
"reveal": "silent"
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
复制代码
结束!