IDEA实现SpringBoot项目的热部署
发布日期:2022-02-24 01:06:45 浏览次数:7 分类:技术文章

本文共 1755 字,大约阅读时间需要 5 分钟。

IDEA实现SpringBoot项目的热部署

作为程序员,在日常的实际开发过程中,会频繁修改代码并重启应用,随着项目的体量越来越大,每次手动重启所需要的时间也越来越长,如果涉及到模块的相互依赖,还需要考虑启动的先后顺序问题,所以热部署对于开发来说显得十分必要,本文将介绍如何在IDEA(版本2019.2)中实现SpringBoot项目的热部署。

本文使用spring-boot-devtools实现的热部署,按照下面步骤进行操作即可。

配置Devtools

添加Spring Boot Devtools依赖

在项目的pom.xml文件中添加以下依赖:

org.springframework.boot
spring-boot-devtools
runtime
true

这里需要说明一下spring-boot-devtools依赖的作用,很多朋友只知道开发时应该使用该依赖,但是不清楚该依赖的作用:spring-boot-devtools 为应用提供了一些开发时特性,包括默认值设置,自动重启,livereload 等。

1)属性默认值

Spring Boot 支持的一些库中会使用缓存来提高性能,例如模版引擎将缓存编译后的模板,以避免重复解析模板文件。 此外,Spring mvc 可以在服务静态资源时向响应中添加 HTTP 缓存头。

虽然缓存在生产中非常有益,但它在开发过程中可能会产生反效果,它会阻止你看到刚刚在应用程序中进行的更改。 因此,spring-boot-devtools 将默认禁用这些缓存选项。

2)自动重启

Spring Boot 自动重启原理在于其使用两个 classloader:不改变的类(如第三方jar)由 base 类加载器加载,正在开发的类由 restart 类加载器加载。

应用重启时,restart 类加载器被扔掉重建,而 base 类加载器不变,这种方法意味着应用程序重新启动通常比“冷启动”快得多,因为 base 类加载器已经可用并已填充。

在了解了spring-boot-devtools的作用后,那我们就知道在配置了 devtools 后,classpath下任何文件的修改都会导致项目自动重启。

如何判断热加载是否成功?

当我们没有使用热部署的时候,启动项目使用的加载器是[ main],而当我们使用热部署的方式启动项目以后,使用的加载器就变为了[ restartedMain] 了,通过观察加载器的名称,就能判断热部署是否已经部署成功。

配置前后的加载器变化,如下图所示:

未使用热部署的方式

使用热部署的方式启动

设置自动编译

spring-boot-devtools的作用只是帮助我们自动重启项目,并不会帮我们去编译代码,我们知道Java代码都是需要先被编译成class字节码文件以后,才能被JVM运行的;所以要想spring-boot-devtools重启时加载最新修改的代码,我们还需要设置自动编译。IDEA也提供了自动编译的方法,需要我们对其进行设置。

步骤一:设置非运行或调试状态下的自动编译

打开打开Settings -> Build,Execution,Deployment->Compiler,开启自动编译。

设置自动编译
注:上面的操作只是开启了非运行调试状态下的自动编译。我们显然是想在程序运行时就能能进行自动编译,所以还需进行下一步的设置。

步骤二:设置运行调试时的自动编译

如果想要让我们修改的代码在程序运行调试时就能够进行自动编译,我们需要勾选:compiler.automake.allow.when.app.running属性

具体方法是:使用快捷键:Ctrl+Shift+Alt+/,选择Registry,找到并勾选compiler.automake.allow.when.app.running

如图:

设置运行时自动编译

总结

首先IDEA通过devtools实现SpringBoot项目的热部署,然后再通过设置运行调试时自动编译,使得classpath路径下文件发生变化,触发devtools自动重启,最后达到热部署的效果。

本文参考链接:

转载地址:https://blog.csdn.net/weixin_45877445/article/details/112845391 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mac中python3(3.8.3)的安装
下一篇:MySQL8.0.22版本下载安装详细教程(Windows)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月13日 07时30分11秒