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 还需要注意以下几点:

  1. 如果使用了 Spring Boot DevTools,应该禁用 IDEA 的自动重启功能,否则会导致应用程序多次重启。
  2. 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 ,结果如下图: