Spring Boot项目热加载和热部署
在Spring Boot项目中比较常用的热部署方式是采用devtools。
一、导入devtools依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
spring-boot-devtools从名称就可以看出来,是开发者工具包,其主要的功能就是实现热加载。
其实现原理就是两个ClassLoader,一个负责加载那些不会经常改变的文件,比如:第三方jar包,一旦引入项目之后这部分代码在调试过程中就处于不变的状态;一个负责加载可能经常改变的类,比如我们自己在项目中写的代码,被称为restart ClassLoader。当有代码发生改变的时候,重建一个restart ClassLoader,原有的restart ClassLoader被丢掉。由于每次重新加载的内容较少,所以速度比手动重启更快一些。
二、设置IDEA
- 首先,运行时编译配置:组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running” 。
- 其次,自动化编译配置: “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Make project automatically” 。这是一种重新自动化的编译整体项目的方法。但是笔者一般不这么做,因为IDEA的文件是自动保存的,你想修改一个字符串,有可能你只修改完成第一个字符它就重新编译了,重新加载启动。
- 最后,在一些相对旧的IDEA版本上运行时配置,按如下图形勾选。(新版本IDEA已经不需要了)
三、修改application.yml配置
spring:
devtools:
restart:
enabled: true # 热加载生效
additional-paths: src/main/java # 额外新增的热加载目录
#exclude: #热加载排除目录
默认情况下,支持热加载的目录如下,如果需要其它目录下文件支持热加载需要手动配置:
- /META-INF/maven
- /META-INF/resources
- /resources
- /static
- /public
- /templates
注意:在新的Spring Boot devtools版本中已经不需要以上配置了
四、安装LiveReload插件
最后建议你去chrome 浏览器插件商店安装一个插件叫做LiveReload。
Spring devtools默认会启动一个 Live Reload Server实例,监听文件的变化。并实时的与浏览器插件通信,更新浏览器展示界面。这样,你就不用每次更改内容之后都点击浏览器刷新按钮了。
五、测试
自行修改一下代码,看看会不会生效。通常不生效的原因有两种:
- JDK编译版本和运行版本不统一,自行学习一下IDEA环境下JDK配置
- 浏览器缓存或者其他的缓存软件导致的问题
一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。
通俗易懂,深入浅出,一篇文章只讲一个知识点。
在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。
文章不涉及代码,不烧脑细胞,人人都可以学习。
当你决定关注「一点教程」,你已然超越了90%的程序员!