• IDEA SpringBoot 热部署


    参考文献:

    https://blog.csdn.net/qq_42685050/article/details/81588584

    https://juejin.cn/post/6844904121821036552

    https://blog.csdn.net/lisheng19870305/article/details/94620716

     

    近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

    devtools的原理

    深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

    这里我没有把所有的方式都尝试一遍,只是使用了devtools的方式

    总的来说,一共需要两个步骤:

    第一步、先设置我们的pom.xml文件,加入依赖

    首先是把下面代码在<dependencies>中

    <!--添加热部署-->
     
    <dependency>
     
    <groupId>org.springframework.boot</groupId>
     
    <artifactId>spring-boot-devtools</artifactId>
     
    <optional>true</optional>
     
    <scope>true</scope>
     
    </dependency>
    

      

    另外下面的代码是放在<build>  下面<plugins>里的

    <plugin>
     
    <!--热部署配置-->
     
    <groupId>org.springframework.boot</groupId>
     
    <artifactId>spring-boot-maven-plugin</artifactId>
     
    <configuration>
     
    <!--fork:如果没有该项配置,整个devtools不会起作用-->
     
    <fork>true</fork>
     
    </configuration>
     
    </plugin>
    

      

    第二步、设置IDEA的自动编译:

    (1)File-Settings-Compiler勾选 Build Project automatically

    (2)快捷键 ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

    这样我们的热部署就完成了,可以再我们的项目中修改返回值,或者修改Mapping的value值后,在我们的页面中刷新试试,

    我们的修改已经生效了,不用通过再关闭再开启项目查看了。


    spring-boot-devtools 介绍

    • spring-boot-devtools 是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。

    • spring-boot-devtools 可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是 spring-boot-devtools 会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。

    • 由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。

    配置热部署

    • 在 pom.xml 文件中,添加项目 spring-boot-devtools 依赖
    <!--热部署依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
     </dependency>
    
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!--没有该项配置,热部署不会起作用-->
        <configuration>
            <fork>true</fork>
        </configuration>
     </plugin>
    

      

    • 在资源文件 application.properties 中进行热部署的相关配置
    # 页面修改后立即生效,关闭缓存,立即刷新
    spring.thymeleaf.cache=false
    # 热部署生效
    spring.devtools.restart.enabled=true
    # 设置需要重启的目录
    spring.devtools.restart.additional-paths=src/java/main
    # 设置不需要重启的目录
    spring.devtools.restart.exclude=static/**,public/**,WEB-INF/**
    # 为 mybatis 设置,生产环境可删除
    # restart.include.mapper=/mapper-[\w-\.]+jar
    # restart.include.pagehelper=/pagehelper-[\w-\.]+jar
    

      

     

    当热部署搭建完成后,程序只要启动一次即可,后面修改代码时,只需保存后便可以触发热部署机制,自动重启服务。

    设置 IDEA 环境自动编译

    在使用 IDEA 编译器时,需要设置自动编译。

    • 在编译器选项中勾选 Build project automatically 选项
    • 使用快捷键:Ctrl + Alt + Shift + / 调出 Registry 窗口,勾选 compiler.automake.allow.when.app.running 选项

    源码地址

    springboot-devtools


    具体步骤

    一、开启IDEA的自动编译(静态)

    具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。

    二、开启IDEA的自动编译(动态)

    具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。

    • compiler.automake.allow.when.app.running -> 自动编译
    • compile.document.save.trigger.delay -> 自动更新文件

    PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!

    三、开启IDEA的热部署策略(非常重要)

    具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。

    image.png

    四、在项目添加热部署插件(可选)

    温馨提示:
    如果因为旧项目十分臃肿,导致热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools依赖,然后使用Control+Shift+F9进行免启动快速更新!!

    具体步骤:在POM文件添加热部署插件

    <dependency>
     
    <groupId>org.springframework.boot</groupId>
     
    <artifactId>spring-boot-devtools</artifactId>
     
    <scope>runtime</scope>
     
    </dependency>
    

      

    五、关闭浏览器缓存(重要)

    打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。

  • 相关阅读:
    循环的其他用法
    if和switch
    Activity and Task Design
    Accessing Resource学习
    Ctrl 和Alt 快捷键设置的原则
    Android代码没有错误,但是运行出错
    Android读取txt文本文档在手机上显示乱码解决方法
    ImageButton介绍及两种透明方案
    Android 的 Button 按钮实现的两种方式
    resdrawable-hdpi ew.png:0: error: invalid symbol: 'new'错误原因是new是关键词呀
  • 原文地址:https://www.cnblogs.com/sddai/p/14023191.html
Copyright © 2020-2023  润新知