springboot-devtools 热部署
添加依赖jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
添加 spring-boot-devtools。jar 之后就可以实现热部署了
- 【说明】2:
spring-boot-devtools
对于前端使用模板引擎的项目,能够自动禁用缓存,在页面修改后,只需要刷新浏览器器页面即可; - 【说明】3: 为什么在 idea 中
spring-boot-devtools
没有热部署? 因为在Idea 中自动编译默认是停用的,启用路径build -> compile -> buildProjectAutomatically
- 【说明】4: 为什么在 idea 中启用自动编译依然没有热部署? idea监测到项目runninng 或者 debuging 会停用自动编译,所以还需要手动biild [Ctrl + F9] 或者 [ctrl + b]
热部署一般是开发过程中使用,开发者不想因为修改内容后重启server浪费大量的时间,而是希望修改代码后能够快速加载自己修改的方法或者类。节省开发时间,为开发者提供改好的开发体验。
IDEA本身提供了热部署功能,但是限制性比较大,只能对静态资源的修改、方法内的修改才能进行热更新,对于方法参数或者方法类的修改不能进行热部署,但是像devtools,jrebel 都能够对类的修改进行重新加载。
另外,网上我们会看到教程,建议将 compiler.automake.allow.when.app.running
勾选上。
- 原因是,自动编译在 Running 运行中默认是不生效的,通过勾选上
compiler.automake.allow.when.app.running
,允许在 Running 运行中也生效。 - 个人建议的话,不要勾选。如果 Running 运行中修改了代码,也会导致热部署,不太合适。如果真要热部署,使用 Debug 运行项目更合理。
链接:https://www.zhihu.com/question/590772558/answer/2945313693
添加依赖后,还需要在 IDEA 中打开自动编译功能。在 IDEA 的设置中,选择 Build, Execution, Deployment > Compiler,将 Build Project automatically 勾选上。
使用 Spring Boot DevTools 还需要注意以下几点:
- 如果使用了 Spring Boot DevTools,应该禁用 IDEA 的自动重启功能,否则会导致应用程序多次重启。
- Spring Boot DevTools 默认会忽略一些文件的变化,如 application.properties 文件和 application.yml 文件等。如果需要监测这些文件的变化,可以在项目的 application.properties 文件中添加以下配置:
spring.devtools.restart.additional-paths=src/main/resources/application.properties,src/main/resources/application.yml
如果使用了 Spring Boot DevTools,需要注意的是热部署不适用于所有场景。例如,当应用程序使用了 AOP 或代理等技术时,热部署可能会导致无法预期的结果。此时,最好还是使用传统的冷部署方式。
<!--optional 表示依赖是否向下传递 true表示不向下传递 默认值是false向下传递 -->
链接:https://www.jianshu.com/p/0e3efd50e3e3
SpringBoot 启动时执行了两次问题
说明
在使用 Springboot 时,如果引入了 devtools 依赖,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
则会导致启动两次的问题。
可以在启动方法中,执行一个输出:
public static void main(String[] args) {
System.out.println ("启动了...");
SpringApplication.run(ApiApplication.class, args);
}
会在控制台上,看到输出了两次 "启动了..."。
解决方法
如果不需要 devtools 插件,可以移除掉该依赖。
链接:http://events.jianshu.io/p/b9aa539241c5
、通过 LiveReload 插件控制静态文件的热部署
前面虽然可以通过配置解决静态文件的热部署问题,但是没有必要!因为静态资源文件发生变化后不需要编译,按理说保存后刷新下就可以访问到了。
devtools 中默认嵌入了 LiveReload 服务器,利用 LiveReload 可以实现静态文件的热部署,LiveReload 可以在资源发生变化时自动触发浏览器更新,LiveReload 支持 Chrome、Firefox 以及 Safari 。以 Chrome 为例,在 Chrome 应用商店搜索 LiveReload ,结果如下图: