• SpringBoot-热部署


    Spring Boot 中的热部署

    只需要添加 spring-boot-devtools 依赖,最关键的原理就是两个不同的 classloader:

    • base classloader 用来加载那些不会变化的类,例如各种第三方依赖
    • restart classloader 用来加载那些会发生变化的类,开发者自己写的代码

    就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader 代替。在整个过程中,因为只重新加载了变化的类,所以启动速度要被重启快。

    有另外一个问题,就是静态资源文件。使用 devtools ,默认情况下当静态资源发生变化时,并不会触发项目重启。虽然我们可以通过配置解决这一问题,但是没有必要!因为静态资源文件发生变化后不需要编译,按理说保存后刷新下就可以访问到了。

    LiveReload

    devtools 中默认嵌入了 LiveReload 服务器,利用 LiveReload 可以实现静态文件的热部署,LiveReload 可以在资源发生变化时自动触发浏览器更新,LiveReload 支持 Chrome、Firefox 以及 Safari 。以 Chrome 为例,在 Chrome 应用商店搜索 LiveReload ,结果如下图:
    在这里插入图片描述
    将第一个搜索结果添加到 Chrome 中,添加成功后,在 Chrome 右上角有一个 LiveReload 图标
    在这里插入图片描述
    在浏览器中打开项目的页面,然后点击浏览器右上角的 LiveReload 按钮,打开 LiveReload 连接。

    【注意】
    LiveReload 是和浏览器选项卡绑定在一起的,在哪个选项卡中打开了 LiveReload,就在哪个选项卡中访问页面,这样才有效果。

    打开 LiveReload 之后,我们启动一个加了 devtools 依赖的 Spring Boot 项目:

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-devtoolsartifactId>
        <scope>runtimescope>
        <optional>trueoptional>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此时随便在 resources/static 目录下添加一个静态 html 页面,然后启动 Spring Boot 项目,在打开了 LiveReload 的选项卡中访问 html 页面.
    访问成功后,再去手动修改 html 页面代码,修改成功后,回到浏览器,不用做任何操作,就会发现浏览器自动刷新了,页面已经更新了。

    整个过程中,Spring Boot 项目并没有重启。
    如果开发者安装并且启动了 LiveReload 插件,同时也添加了 devtools 依赖,但是却并不想当静态页面发生变化时浏览器自动刷新,那么可以在 application.properties 中添加如下代码进行配置:

    spring.devtools.livereload.enabled=false
    
    • 1

    模板热部署

    ①、Thymeleaf配置

    spring.thymeleaf.cache=false
    
    • 1

    ②、FreeMarker配置

    spring.freemarker.cache=false
    
    • 1

    ③、Groovy配置

    spring.groovy.template.cache=false
    
    • 1

    ④、Velocity配置

    spring.velocity.cache=false
    
    • 1

    调试模式Debug热部署

    运行系统时使用Debug模式,无需装任何插件即可,但是无发对配置文件,方法名称改变,增加类及方法进行热部署,使用范围有限。

    spring-boot-devtools热部署

    SpringBoot项目中添加spring-boot-devtools依赖实现页面和代码的热部署.
    系统的任何变动包括配置文件修改、方法名称变化都能覆盖,但是后遗症也非常明显,它是采用文件变化后重启的策略来实现了,主要是节省了我们手动点击重启的时间,提高了实效性,在体验上会稍差。

    spring-boot-devtools 默认关闭了模版缓存,如果使用这种方式不用单独配置关闭模版缓存。

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-devtoolsartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    Spring Loaded热部署

    此种方式与Debug模式类似,适用范围有限,但是不依赖于Debug模式启动,通过Spring Loaded库文件启动,即可在正常模式下进行实时热部署。此种需要在 run confrgration 中进行配置。

    JRebel热部署

    Jrebel是Java开发最好的热部署工具,对Spring Boot 提供了极佳的支持,JRebel为收费软件,试用期14天。,可直接通过插件安装。

  • 相关阅读:
    LeetCode 899. 有序队列
    Spark面试题(一)
    javaScript进阶面向对象ES6【正则表达式概述、正则表达式在 JavaScript 中的使用、正则表达式中的特殊字符、正则表达式中的替换】
    基于沙猫群优化的BP神经网络(分类应用) - 附代码
    LeetCode 86 双周赛
    软件架构模式之第七章:基于空间的架构
    pycharm安装并加载编译器,设置背景图片,手把手详细操作
    程序设计与算法(三)C++面向对象程序设计笔记 第七周 输入输出和模板
    [学习分享]指数移动平均
    DCMM认证的标准
  • 原文地址:https://blog.csdn.net/usa_washington/article/details/133266779