• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Spring boot实现热部署的两种方式详解

Spring boot实现热部署的两种方式详解

作者:Be a funny man. 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Be a funny man. 通过本文主要向大家介绍了spring boot注解详解,spring boot详解,spring boot 启动方式,spring boot教程,spring boot等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

热部署是什么

大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 Class 文件,这个文件里记录着和代码等对应的各种信息,然后 Class 文件将被虚拟机的 ClassLoader 加载。

而热部署正是利用了这个特点,它监听到如果有 Class 文件改动了,就会创建一个新的 ClaassLoader 进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前。

类加载机制

Java 中的类经过编译器可以把代码编译为存储字节码的 Class 文件,该 Class 文件存储了各种信息,最终要加载到虚拟机中运行使用。

类加载机制(摘自《深入理解 Java 虚拟机》)

      虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型。

Spring Boot 实现热部署

Spring Boot 实现热部署很简单,我们使用上一章创建的项目 Springboot 创建简单的 web 交互应用 来演示。

  • 使用 Spring Loaded
  • 使用 spring-boot-devtools

springloaded

在 POM 文件中添加依赖

<build>
 <plugins>
 <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <dependencies>
   <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>springloaded</artifactId>
    <version>1.2.6.RELEASE</version>
   </dependency>
  </dependencies>
 </plugin>
 </plugins>
</build>
</div>

添加完毕,启动项目

Note

这次启动不能直接运行 main 方法了,需要使用
mvn spring-boot:run 启动,然后随意在代码中写一个 System.out.println("Hi") ,再次调用那个方法,会发现控制台会打印出 Hi。

spring-boot-devtools

添加 POM 文件依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
</div>

然后还是使用 mvn spring-boot:run 启动项目,随意更改代码即可看到效果。

如果我们想指定让 devtools 监听指定文件夹,那么可以在 application.yml 配置
spring.devtools.restart.additional-paths=your path,注意这里需要改成 yml 文件的格式。

Important(特别注意)

可能会有同学按照以上方法处理了都无效。

这里要特别注意下:由于热部署是监听 Class 文件的变化,它自身不会主动去编译 Java 文件,所以我们得在 Java 文件改动时,自动编译成 Class 文件,然后热部署工具创造的新的类加载器才会加载改变后的 Class 文件。

所以,如果你使用 IDEA 开发工具的话,记得要把自动编译打开。

如图打钩即可。

由于热部署的时候是产生了新的类加载器,我们的一个类可能在虚拟机中存在两个类,比如代码中就一个 User 类,但是虚拟机中会存在两个 User ,虽然是同一个 Class 文件,但是却是两个独立的类,这个要清楚。

由于第一次使用热部署,一开始遇到个很奇怪的问题,A instanceof A == false,明明两个 A.getClass() 都一样,但结果就是 false,还问了几个朋友,表示都没遇到,后来当我把 devtools 依赖注释后,才正确执行。

如果有遇到类似问题的朋友,可以检查下是不是由于不同的 ClassLoader 造成的。

本系列所有代码已同步到 GitHub, 项目地址 github:sboot-learn,大家也可以通过本地进行下载。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解Spring boot上配置与使用mybatis plus
  • 详解Spring Boot中Controller用法
  • 详解Spring Boot 定时任务的实现方法
  • 详解在Spring Boot中使用数据库事务
  • spring boot整合CAS配置详解
  • Spring Boot Redis 集成配置详解
  • 详解Spring Boot集成MyBatis(注解方式)
  • Spring Boot的Profile配置详解
  • 详解spring boot配置 ssl
  • spring boot 的常用注解使用小结

相关文章

  • 2017-05-28Java定时器例子_动力节点Java学院整理
  • 2017-05-28Struts2实现单文件或多文件上传功能
  • 2017-05-28详解JAVA类加载机制(推荐)
  • 2017-05-28Java本地缓存的实现代码
  • 2017-05-28Spring Batch读取txt文件并写入数据库的方法教程
  • 2017-05-28Java追加文件内容的三种方法实例代码
  • 2017-05-28Java微信公众平台开发(6) 微信开发中的token获取
  • 2017-05-28java IO 字节流详解及实例代码
  • 2017-05-28Java中初始化块详解及实例代码
  • 2017-05-28Java根据模板导出Excel报表并复制模板生成多个Sheet页

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java计算两个程序运行时间的实例
    • Java中ArrayList和LinkedList之间的区别_动力节点Java学院整理
    • Java中的PrintWriter 介绍_动力节点Java学院整理
    • Java中的vector类使用方法示例详解
    • IntelliJIDEA平台下JNI编程(五)—本地C代码创建Java对象及引用
    • Java 中的Printstream介绍_动力节点Java学院整理
    • java容器详细解析
    • java实现上传图片并压缩图片大小功能
    • java多线程应用实现方法
    • java中的Struts2拦截器详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有