全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

热部署是什么

大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 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>

添加完毕,启动项目

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>

然后还是使用 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,大家也可以通过本地进行下载。

总结

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


# spring  # boot  # 热部署  # lo  # loaded配置  # 热更新  # 彻底解决IDEA中SpringBoot热部署无效的问题(推荐)  # IDEA解决springboot热部署失效问题(推荐)  # Idea中Springboot热部署无效问题解决  # Springboot笔记之热部署及不生效的解决方案  # 加载  # 机中  # 几个  # 就会  # 如果你  # 会有  # 却是  # 大家都  # 都没  # 才会  # 当我  # 能在  # 要把  # 数据结构  # 可以通过  # 很简单  # 将被  # 并对  # 如图  # 问了 


相关文章: 建站org新手必看:2024最新搭建流程与模板选择技巧  建设网站制作价格,怎样建立自己的公司网站?  如何快速搭建虚拟主机网站?新手必看指南  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何通过西部数码建站助手快速创建专业网站?  定制建站价位费用解析与套餐推荐全攻略  如何选择高效可靠的多用户建站源码资源?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  深入理解Android中的xmlns:tools属性  如何在阿里云完成域名注册与建站?  如何在Windows服务器上快速搭建网站?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  高性价比服务器租赁——企业级配置与24小时运维服务  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何在IIS服务器上快速部署高效网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  网站微信制作软件,如何制作微信链接?  建站之星如何快速解决建站难题?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  香港服务器如何优化才能显著提升网站加载速度?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  网站制作网站,深圳做网站哪家比较好?  建站之星安装提示数据库无法连接如何解决?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站之星代理平台如何选择最佳方案?  网站制作模板下载什么软件,ppt模板免费下载网站?  寿县云建站:智能SEO优化与多行业模板快速上线指南  网站图片在线制作软件,怎么在图片上做链接?  北京专业网站制作设计师招聘,北京白云观官方网站?  C#怎么创建控制台应用 C# Console App项目创建方法  济南网站制作的价格,历城一职专官方网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  建站主机选择指南:服务器配置与SEO优化实战技巧  如何快速登录WAP自助建站平台?  如何正确选择百度移动适配建站域名?  如何通过WDCP绑定主域名及创建子域名站点?  如何快速搭建高效可靠的建站解决方案?  浅谈Javascript中的Label语句  如何使用Golang安装API文档生成工具_快速生成接口文档  定制建站如何定义?其核心优势是什么?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  javascript中的try catch异常捕获机制用法分析  网站企业制作流程,用什么语言做企业网站比较好?  平台云上自助建站如何快速打造专业网站?  宝塔新建站点为何无法访问?如何排查?  如何快速生成可下载的建站源码工具? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。