博客
关于我
008. Spring Boot(1.5.10版本)热部署
阅读量:83 次
发布时间:2019-02-25

本文共 1196 字,大约阅读时间需要 3 分钟。

Java热部署与热加载的联系与区别

Java热部署与热加载是现代Java开发中常用的技术,能够帮助开发者在不重启服务器的情况下进行代码更新和类重新加载。以下将详细介绍它们的联系、区别以及实际应用场景。

效果

热部署与热加载的共同点在于:

  • 无需重启服务器:可以直接在运行中更新项目。
  • 减少部署时间:减少了服务器重新启动的等待时间。
  • 基于Java类加载器:两者都依赖于Java的类加载机制。
  • 区别

    部署方式

    热部署 热加载 说明
    重新部署项目 重新加载class 在运行时,整个项目作为一个新的类加载器加载项来替换。
    依赖类加载器处理class 依赖类加载器处理class 热部署是对整个项目进行类别替换,而热加载则是对具体类进行重新加载。

    场景

    • 热部署:适用于生产环境,支持动态更新,但需谨慎操作。
    • 热加载:适用于开发环境,方便快速开发和调试,但难以监控,生产环境使用不安全。

    使用

    SpringBoot的热部署方式

    SpringBoot 提供了两种热部署方式:

  • SpringLoader插件

    • 缺陷:对页面无能为力,无法直接处理页面内容。
    • 使用方式:通过Maven插件实现,启动命令为 java -Dspring-boot:run
    • 注意:后台以进程形式运行,需手动关闭。
  • 直接使用JAR包

    • 步骤:在lib目录下添加SpringLoader的JAR包。
    • 启动方式:右键项目→Run As→Run Configurations,配置启动命令为 java -javaagent:.\lib\springloaded.jar -noverify
  • DevTools工具

    • 功能:通过自动化工具实现项目重新部署。
    • 与SpringLoader的区别:DevTools采用的是重新部署而非类加载的方式。

    原理

    类加载机制

    类在JVM中的加载过程分为五个阶段:

  • 加载:通过类加载器获取类文件。
  • 验证:确保字节码符合规范。
  • 准备:为静态变量分配内存。
  • 初始化:执行类构造器初始化类变量和静态代码块。
  • 使用:类被使用时进行最终准备。
  • 被动引用

    类的被动引用不会触发类初始化:

    • 通过数组引用引用类。
    • 通过反射调用类中的方法或获取静态字段(除非字段被final修饰)。
    • 在JVM启动时指定主类(如main方法所在类)。

    接口的初始化

    接口的初始化与类不同:

    • 子接口的初始化并不要求父接口初始化,只有在实际使用父接口时才会触发。

    类加载的五个阶段

  • 加载:获取类的二进制流。
  • 验证:校验字节码格式和语义。
  • 准备:为静态变量分配内存。
  • 初始化:执行类构造器,初始化类变量和静态代码块。
  • 使用:类被正常使用。
  • 结论

    热部署与热加载是Java开发中常用的技术,适用于不同的场景。热部署适合生产环境,支持动态更新;而热加载适合开发环境,提升开发效率。通过合理配置SpringBoot的热部署工具,可以实现无需重启服务器的快速部署。

    转载地址:http://ymq.baihongyu.com/

    你可能感兴趣的文章
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>
    Plotly:如何处理重叠的颜色条和图例?
    查看>>
    Plotly:如何手动设置 plotly express 散点图中点的颜色?
    查看>>
    Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
    查看>>