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

原文地址:http://www.jb51.net/article/112473.htm

这篇文章主要介绍了Spring boot实现热部署的两种方式,这两种方法分别是使用 Spring Loaded和使用spring-boot-devtools进行热部署,文中给出了详细示例代码和介绍,需要的朋友可以参考学习,下面来一起看看吧。

热部署是什么

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

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

类加载机制

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

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

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

Spring Boot 实现热部署

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

springloaded

在 POM 文件中添加依赖

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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 文件依赖

?
1
2
3
4
5
<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,大家也可以通过本地进行下载。

总结

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


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot 可以通过以下几种方式实现热部署: 1. 使用 Spring Boot DevTools:Spring Boot DevTools 是 Spring Boot 提供的一个开发工具,可以实现热部署。只需要在 pom.xml 文件中添加依赖,然后在 IDE 中启动应用程序即可。 2. 使用 JRebel:JRebel 是一款 Java 热部署工具,可以实现快速的代码更新和重新加载。Spring Boot 也可以使用 JRebel 实现热部署。 3. 使用 Spring Loaded:Spring Loaded 是一个 Java 类热部署器,可以在应用程序运行时重新加载类。Spring Boot 也可以使用 Spring Loaded 实现热部署。 4. 使用 Spring Boot 自带的热部署功能:Spring Boot 也提供了一些自带的热部署功能,可以通过在 application.properties 文件中添加配置来启用。例如,可以使用 spring.devtools.restart.enabled=true 来启用自动重启功能。 ### 回答2: Spring Boot是一个非常优秀的Java语言框架,它的出现极大地简化了Java相关开发者们进行项目的开发与部署。而其中的热部署功能也是Spring Boot非常优秀的一个特性,能够让我们达到快速开发、调试的目的。下面本文将介绍Spring Boot实现热部署的常用方式。 1. Spring Boot DevTools 通过引入Spring Boot DevTools这个依赖,它提供了众多的开发工具,其中包括了热部署功能,开启方式就是简单的添加以下配置在pom.xml中: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> ``` 2. Spring Loaded Spring Loaded是一个开源的热部署框架,可以让Java程序实现快速开发以及调试。需要在pom.xml中加入以下配置: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.5.RELEASE</version> <scope>provided</scope> </dependency> ``` 3. JRebel JRebel是一款非常知名的Java热部署工具,使用它可以避免进行多次重启,将提高开发效率。JRebel与Spring Boot配合使用时也非常方便,只需在pom.xml中添加相应的配置即可。 4. IntelliJ IDEA IntelliJ IDEA是一款非常优秀的Java开发工具,Spring Boot的项目几乎都是使用IDEA进行开发,其提供了内置的热部署功能,使用非常方便,在运行模式中选择HotSwap即可实现热部署。 综上可以发现,Spring Boot热部署方式还是比较多的,可以依据自己的需求进行选择。而其中最为常用的便是Spring Boot DevTools以及IDEA内置的热部署,这两种方式使用起来都非常方便,大大地提高了开发效率,降低了开发的成本。 ### 回答3: Spring Boot是一种快速构建应用程序的框架,它提供了很多便捷的功能来简化开发过程,其中之一就是热部署热部署能够让我们在修改代码后不必重启应用程序,而是可以自动更新应用程序。这样开发者就可以快速迭代、测试代码,提高开发效率,下面我们来看下Spring Boot有哪些方法可以实现热部署。 1.使用Spring-boot-devtools Spring Boot提供了一个名为spring-boot-devtools的开发工具包,它内部集成了热部署功能,只需要将它添加到项目的pom.xml文件中,就可以实现自动热部署。这个工具包会监控你的classpath下的文件改动,一旦检测到文件改动,就会自动重新加载应用程序。 2.使用JRebel插件 JRebel是一款优秀的Java热部署工具,它可以实现Java代码和资源的快速重载,删除了重复构建和重新部署应用程序的时间,可以在几秒钟内看到更改的结果。与Spring-boot-devtools不同的是,JRebel需要在IDE中安装相应的插件,在开发阶段使用较为方便。 3.使用springloaded Spring Boot原来的热部署方案是使用springloaded,在项目的pom.xml中引入依赖后,重启项目即可生效。然而Springloaded并不支持Java 8及更高版本的Java,因此已经成为不推荐使用的方式。 总结而言,以上三种方法是实现Spring Boot热部署的常用方式,可以根据自己的开发需求和环境选择适合的方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值