SpringBoot实现热部署两种方式!

前言

小宅作为一个Java程序员,在日常的工作中,经常需要修改代码,然后重启服务,在验证代码是否生效。如果是小项目还好,重启速度比较快,等待时间比较短。但是随着项目逐渐变大,并且被拆分成多个服务时,改动一些代码,可能需要重启多个服务才能生效。这样下来就耗费了大量的时间在等待服务重启。

这样肯定是不行的,极大的影响了我的开发效率,那么是否有方式能够实现,修改完代码之后,能够不重启项目呢?

热部署(Hot Swap)

从Java1.4起,JVM引入了HotSwap,能够在Debug的时候更新类的字节码。所以使用热部署,可以实现修改代码后,无须重启服务就可以加载修改的代码,但是它只能用来更新方法体。作为神器的IDEA自然是支持这一技术的。

配置IDEA

点击当前运行的服务,再点击Edit Configurations

点击要配置的程序,找到 On ‘Update’ actionOn frame deactivation选择 Update classes and resources。点击OK就可以实现热部署了。

经过以上配置,在修改代码以后。只需要点击小锤子或者使用快捷键Command + F9重新编译一下,就可以让改动的代码生效了。并且还会提示有多少个class被重新读取了。

虽然到这里已经能实现热部署的功能了。但是Java的虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。

测试

初始状态

方法体修改

类结构变更

由于热部署只支持修改方法体,所以类结构变更时会报错,并提示是否需要重启。

DevTools

前面虽然通过配置IDEA实现了简单的热部署,但是有很明显的缺点,只能实现方法体的修改热部署。很明显无法满足日常的需求的,所以这个时候就需要使用DevTools来替代了。

DevTools是Spring为开发者提供了一个名为spring-boot-devtools的模块,来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。使用起来非常简单,只需要将下面的依赖引入项目里面就可以了。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>

<< · Back Index ·>>

发表回复

相关推荐

Day 4 酒店前廳部組織結構及各崗位英文名稱

嗨,親愛的小夥伴們晚上好,堅持如期更新是一種好習慣。我們先來對上期內容考個試,很簡單,莫慌。HR是哪個部門的簡稱?哪個...

· 53秒前

绝对实用:内存体质、内存超频、内存选购 频率&电压&时序

今天把一直想讲的内存问题讲一讲,起因是今天在张大妈的评论区的一个争论。 如下:

· 1分钟前

一篇文章了解DSD及DTS格式的相关疑问解答

《一》什么是DSD?这种格式有什么优缺点?DSD是Direct Stream Digital的缩写,是Sony与Philips推出SACD时所注册的商标。这种编 ...

· 5分钟前

解决iPad故障问题的三种重置方式:出厂恢复、软重置和强制重启

这篇文章解释了如何重新启动iPad,以及如果它没有响应,如何强制它重新启动。它还包括如何重置iPad的其他选项。

· 6分钟前

分享一下:马斯洛5个需求层次

1、生理需求 生理上的需要是人们最原始、最基本的需要,如空气、水、吃饭、穿衣、性欲、住宅、医疗等等。若不满足,则有生 ...

· 6分钟前