Idea spring boot 热加载
背景: 一个后台管理项目, 使用 spring boot + freemarker来实现,需要在开发时支持热加载。
1. 添加spring boot 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
原理 使用了两个 ClassLoader ,一个 ClassLoader 用来加载那些不会变的类(如:第三方Jar包),
另一个 ClassLoader 加载会更改的类,称为 restart ClassLoader,这样在有代码更改时,原来的 restart ClassLoader 被丢弃,重新创建一个 restart ClassLoader
。如此一来,由于需要加载的类比较少,所以实现了较快的重启。
发生时机
devtools
会监听 classpath 下的文件变动,并会立即重启应用
2. idea 配置
Preference -> Compiler -> Build project automatically
3. idea 配置 2
Preference -> Advanced Settings -> Allow auto-make to start even if developed application is currently running
4. 其他
- 如果未生效, 尝试重启 idea
- 网页未刷新, 强制刷新页面 或
chrome -> F12 -> Network -> Disable cache
- freemarker 配置:
spring.freemarker.cache=false spring.freemarker.settings.template_update_delay=0
参考: