Springboot热部署的两种实现方式
热部署
Java1.4开始,JVM引入了HotSwap(热加载),它针对的是单个字节码文件,重新编译后不需要停机就可以加载使用新的class文件。基于此,实现了热部署,即修改代码后无需重启就可以加载修改的代码,热部署针对的是容器或者整个应用。关于热部署其实有两个部分:
- 重启(restart):自定义开发代码,加载位置为restart类加载器
- 重载(reload):jar包,加载位置为base类加载器
而重启为什么快于重新启动项目呢?
就使用spring-boot-devtools插件而言,重新启动项目的话,需要使用RestartClassLoader和JDK中的类加载器,而热部署的重启就只会使用RestartClassLoader
第一种实现方式(基于idea)
只需要Edit Configuration修改如下
然后在使用这个小锤子或者Ctrl+F9即可
缺点:Java的虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作
第二种实现方式(基于spring-boot-devtools插件)
我们只需要在我们的boot项目的maven依赖中加入devtools的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
然后Ctrl+F9即可
实现自动热部署
自动热部署功能开启有两步
- setting-->Build,Execution,Deployment-->Complier-->Build project automatically打上✔
- setting-->Advanced Settings-->Allow auto-make to start even if developed application is current running打上✔
每次修改代码后,只需要鼠标失去在idea中的焦点五秒左右就会自动重启。
自定义不参与重启的排除项
按如上图格式书写即可,注意用逗号分开,且不能有空格。
关闭热部署功能
@SpringBootApplication public class HotDeployApplication { public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(HotDeployApplication.class, args); } }
只需要设置spring.devtools.restart.enabled的属性为false。
分类:
springLearn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端