springboot实现热部署

springboot实现热部署的两种方式


参考网址:

https://mp.weixin.qq.com/s/vkemSEQGaPdFP6pMmblyPg

说明

作者总结的这两种springboot 热部署方式都是挺好用的 , idea 热部署和电脑的性能也是有关系的 , 如果是配置低的电脑 , 即使配置了热部署 , 有时候生效也很慢 , 要么有可能不生效 . 我的本子上使用的是 2019 idea , 配置devtools就是不生效的


sts(eclipse+springboot的一个集成工具) 热部署就是很快 , 配置低的笔记本也可以快速实现 springboot 项目的热部署

关于 JRebel , 现在是收费的 , 如果使用破解版本 ,我感觉会很卡


建议 , 我之前 windows 本子装了很多 idea 插件 ,导致 idea 启动很慢 , 使用起来有点卡 , 如果笔记本配置低 , 建议少装插件 , 装几个实用插件即可

热部署优势

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

热部署(Hot Swap)

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

配置IDEA

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

image-20211122005543912

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

image-20211122005753118

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

说明:

重新编译的快捷键每个人可能不同 , 重新编译的选项如下图:

image-20211122005917181

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

DevTools

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

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

pom.xml 引入依赖

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

触发重启

DevTools严格意义上其实不算热部署,而是快速重启。为什么这样说呢?DevTools的实现原理是:使用两个类加载器,一个是base classloader来加载不会被更改的类(例如,来自第三方的Jar),还有一个是restart classloader用来加载当前正在开发的类。所以当应用程序重新启动时,restart classloader将被丢弃,并创建一个新的类加载器。也就意味着应用程序重新启动通常比“冷启动”快得多,因为base classloader已经填充好了并且是可用的。

简而言之就是:通过监控类路径资源,当类路径上的文件发生更改时,自动重新启动应用程序,由于只需要重新读取被修改的类,所以要比冷启动快

那么问题来了,该如何更新类路径来触发自动重启呢?其实这个取决于你使用的 IDE:

  1. 在 Eclipse中,保存修改后的文件会导致更新类路径并触发重新启动。
  2. 在 IntelliJ IDEA中,需要点击Build按钮Command + F9构建项目来实现。

配置自动重启

这时候可能有小伙伴想问了,难道IDEA没有类似于Eclipse中保存文件自动触发重启的功能嘛。那肯定是有的,只需要进行下面两步的配置就可以实现了。

注意:需要将前面的设置,全部还原。

1. 开启Build project automatically

image-20211122010756929

2.使用快捷键:Ctrl + Alt + Shift + / 调出 Registry 窗口,勾选 compiler.automake.allow.when.app.running 选项。

image-20211122010608673

image-20211122010649490

新版本如下图所示:

image-20211122010531528

总结

外链图片转存中…(img-WbOgGKaf-1637514698449)]

新版本如下图所示:

[外链图片转存中…(img-bG7cJHcL-1637514698451)]

总结

IDEA只能实现方法体的修改热部署,无法满足日常的使用要求,所以更推荐使用DevTools。但是如果你觉得重新启动对你来说还不够快。你可以考虑使用JRebel插件。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值