手动部署jar包,太low!我推荐一个官方神器!

平时使用SpringBoot开发项目的时候,如果要部署到服务器上,修改代码后需要上传jar包才能实现,这种方式比较麻烦!那么有没有什么办法能自动部署更新后的项目呢?今天给大家分享一款SpringBoot官方的热部署工具spring-boot-devtools,修改完代码后可自动完成热部署,非常方便!

简介

spring-boot-devtools是SpringBoot官方提供的开发工具,如果你的应用集成了它,即可实现热部署和远程调试。使用该工具应用为什么启动更快了?主要是因为它使用了两种不同的类加载器。基础类加载器用于加载不会改变的类(比如第三方库中的类),重启类加载器用于加载你应用程序中的类。当应用程序启动时,重启类加载器中的类将会被替换掉,这就意味着重启将比冷启动更快!

热部署

接下来我们将在SpringBoot项目中集成devtools,来演示下热部署功能。

  • 首先需要在项目的pom.xml中添加devtools的相关依赖;

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
  • 为了方便测试,我们在项目中添加了一个测试接口,用于返回测试消息;

/** * @auther macrozheng * @description SpringBoot Dev Tools测试 * @date 2025/7/22 * @github https://github.com/macrozheng */ @Tag(name = "TestController", description = "SpringBoot Dev Tools测试") @Controller @RequestMapping("/test") public class TestController { @Operation(summary = "测试修改") @RequestMapping(value = "/first", method = RequestMethod.GET) @ResponseBody public CommonResult first() { String message = "返回消息"; return CommonResult.success(null,message); } }
  • 然后启动项目,由于项目中集成了Swagger,可以通过Swagger生成的API文档页面访问接口,返回结果如下,访问地址:http://localhost:8088/swagger-ui.html

{ "code": 200, "message": "返回消息", "data": null }
  • 由于在项目构建时,devtools才会自动重启项目,而IDEA默认并没有开启自动构建,此时我们可以修改应用启动策略,设置当IDEA失去焦点时自动构建项目;

  • 修改Controller中的代码,只要修改下message变量即可;

/** * @auther macrozheng * @description SpringBoot Dev Tools测试 * @date 2025/7/22 * @github https://github.com/macrozheng */ @Tag(name = "TestController", description = "SpringBoot Dev Tools测试") @Controller @RequestMapping("/test") public class TestController { @Operation(summary = "测试修改") @RequestMapping(value = "/first", method = RequestMethod.GET) @ResponseBody public CommonResult first() { String message = "返回消息(已修改)"; return CommonResult.success(null,message); } }
  • 失去焦点后,再次访问测试接口,返回结果如下,证明修改后的代码已经被自动应用了。

{ "code": 200, "message": "返回消息(已修改)", "data": null }

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + Vue 的电商系统(Github标星60K),后端支持多模块和 2024最新微服务架构 ,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

  • Boot项目:https://gitee.com/macrozheng/mall

  • Cloud项目:https://gitee.com/macrozheng/mall-swarm

  • 教程网站:https://www.macrozheng.com

项目演示:

远程调试

devtools除了支持热部署之外,还支持远程调试,接下来我们将把应用部署到Docker容器中,然后试试远程调试!

  • 由于SpringBoot默认打包不会包含devtools,所以我们需要在pom.xml的SpringBoot maven插件配置中添加如下配置;

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--打包时不排除Devtools--> <excludeDevtools>false</excludeDevtools> </configuration> </plugin>
  • 接下来修改application.yml,添加devtools的远程访问密码;

spring: devtools: remote: secret: macro666
  • 然后把项目打包成Docker镜像,使用如下命令运行起来;

docker run -p 8088:8088 --name spring-devtools -d spring-examples/spring-devtools:1.0-SNAPSHOT
  • 之后添加一个SpringBoot应用的运行配置,修改启动类为org.springframework.boot.devtools.RemoteSpringApplication,程序参数为http://192.168.3.101:8088,配置信息具体如下;

  • 启动该配置,控制台输出如下结果表示远程连接成功;

2025-07-22T10:22:13.452+08:00 INFO 34364 --- [spring-devtools] [ main] o.s.b.devtools.RemoteSpringApplication : Starting RemoteSpringApplication v3.4.2 using Java 17.0.9 with PID 34364 2025-07-22T10:22:13.454+08:00 INFO 34364 --- [spring-devtools] [ main] o.s.b.devtools.RemoteSpringApplication : No active profile set, falling back to 1 default profile: "default" 2025-07-22T10:22:13.538+08:00 WARN 34364 --- [spring-devtools] [ main] o.s.b.d.r.c.RemoteClientConfiguration : The connection to http://192.168.3.101:8088 is insecure. You should use a URL starting with 'https://'. 2025-07-22T10:22:13.573+08:00 INFO 34364 --- [spring-devtools] [ main] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2025-07-22T10:22:13.584+08:00 INFO 34364 --- [spring-devtools] [ main] o.s.b.devtools.RemoteSpringApplication : Started RemoteSpringApplication in 0.352 seconds (process running for 0.739)
  • 接下来我们再次修改下Controller中的测试代码,只要修改下message变量即可;

/** * @auther macrozheng * @description SpringBoot Dev Tools测试 * @date 2025/7/22 * @github https://github.com/macrozheng */ @Tag(name = "TestController", description = "SpringBoot Dev Tools测试") @Controller @RequestMapping("/test") public class TestController { @Operation(summary = "测试修改") @RequestMapping(value = "/first", method = RequestMethod.GET) @ResponseBody public CommonResult first() { String message = "返回消息(远程调试)"; return CommonResult.success(null,message); } }
  • 远程调试如果自动构建的话会导致远程服务频繁重启,此时我们可以使用IDEA手动构建,在项目的右键菜单中可以找到构建按钮;

  • 构建成功后可以发现远程服务会自动重启,并应用修改后的代码,访问测试接口返回如下信息,接口地址:http://192.168.3.101:8088/swagger-ui.html

{ "code": 200, "message": "返回消息(远程调试)", "data": null }

总结

使用SpringBoot官方的devtools既可以实现热部署,也可以实现远程调试,反应速度还是非常快的,感兴趣的小伙伴可以尝试下它!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1214632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册功能的安全测试:从入口扼杀账户体系风险

第一部分&#xff1a;开篇明义 —— 定义、价值与目标 定位与价值 在数字化系统的安全防御体系中&#xff0c;注册功能是用户账户生命周期的绝对起点。它远非一个简单的“创建记录”接口&#xff0c;而是整个账户安全体系的基石与第一道闸门。攻击者深谙此道&#xff0c;他们…

Python篇---模块化编程

一、什么是模块化编程&#xff1f; 想象一下你要盖一座房子&#xff1a; 你不会把所有材料堆在一起&#xff0c;而是会分成&#xff1a; 地基模块 墙壁模块 屋顶模块 门窗模块 模块化编程就是把代码分成多个独立的“积木块”&#xff0c;每个积木块负责特定的功能。 二…

2026年GSP医药冷库建造排名揭晓,湖南宏国制冷名列前茅

在医药冷链行业蓬勃发展的当下,GSP医药冷库已成为保障药品质量安全的核心基础设施。对于湖南本地的医药企业而言,选择一家合规、专业且具备本地化服务能力的GSP医药冷库设计安装生产厂家,直接关系到企业的合规运营与…

2026年徐州工业油漆口碑厂家推荐:五家优质企业深度解析

摘要 随着中国制造业的持续升级与基础设施建设的不断推进,工业保护涂料作为保障资产安全、延长设备寿命的关键材料,其重要性日益凸显。徐州,作为淮海经济区的工业重镇,汇聚了众多优秀的工业油漆生产与服务机构。本…

厦门家装领先品牌2026实测榜:十大优质企业,品质装修的不二之选

在厦门想装修房子,有哪些公司值得推荐?据《2025-2026 厦门家装行业发展白皮书》显示,2025 年厦门家装市场成交量同比提升 25%,全案设计、环保材料需求占比超 60%,但全市在册家装企业超 2000 家,品质参差不齐。20…

厦门家装十大领先品牌2026最新榜:品质与口碑双优,装修决策首选

据《2026 中国家装行业发展白皮书》厦门地区专项数据显示,2026 年厦门家装市场需求持续攀升,全年装修需求预计突破 15 万单,其中全案设计、环保材料、智能家装三大需求占比合计超 75%。但市场上超 2000 家在册家装企…

2026年服务不错的叉车租赁企业Top10,尚雅机械位列其中

在物流与仓储行业蓬勃发展的当下,叉车作为核心搬运设备,其租赁服务的可靠性直接影响企业的运营效率与成本控制。面对市场上良莠不齐的叉车租赁服务商,如何挑选到服务优质、口碑过硬的品牌?以下将结合行业需求,为你…

2026年信誉好的旅游品牌企业排行榜,北京启程国际上榜

2026年文旅市场迈向高质量发展新阶段,诚信经营与优质服务已成为游客选择旅游企业的核心标尺。无论是文化深度体验线路、智慧文旅产品,还是跨区域定制化服务,诚信旅游品牌的专业能力直接决定游客的出行体验与企业的市…

2026年揭秘PVC塑胶地板靠谱生产商排行榜,新凯琳位居前列

在医疗、教育、商业等高频使用场景中,PVC塑胶地板因耐磨、防滑、环保等特性成为地面材料优选,但市场同质化严重、低价竞争失序的痛点,让采购方难以找到真正靠谱的PVC塑胶地板靠谱生产商。以下结合行业类型与需求场景…

MATLAB四房间走廊疏散模型设计与实现

MATLAB四房间走廊疏散模型设计与实现 1. 项目概述与需求分析 1.1 项目背景 本项目旨在将一个现有的单房间人员疏散模拟程序扩展为一个复杂的多房间环境,包含四个房间、一个连接走廊以及两个出口。该模拟将基于社会力模型或元胞自动机模型,用于研究人员在紧急情况下的疏散行…

船排班调度系统:FCFS、ATC与遗传算法的集成与优化

船排班调度系统:FCFS、ATC与遗传算法的集成与优化 摘要 本研究针对船排班调度问题,分析了先到先服务(FCFS)、明显延迟成本规则(ATC)和遗传算法(GA)三种调度方法。针对遗传算法以ATC得到的排班序列作为初始种群但得到不同结果的问题,本文从算法原理、实现细节、参数设置等多…

《双征color》诗解——梦幻精灵_cq对终端渲染的数据结构设计模型式拓展

半世迷障欲焚天&#xff0c;本源自在天地间。 笔记模板由python脚本于2026-01-25 12:54:11创建&#xff0c;本篇笔记适合正研究ansi-color的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Python官…

地震数据频率波数域变换与去噪的MATLAB实现指南

一、频率波数域(F-K域)变换原理与实现 频率波数域变换(F-K变换)是地震信号处理的核心技术,通过二维傅里叶变换将时-空域地震信号转换至频率-波数域,揭示信号传播特性。其数学表达式为:其中,\(ω\)为圆频率,\(…

车铣定制哪家强?2025最新排名揭晓,刀塔车床/动力刀塔/4+4车铣/刀塔机/双主轴/数控车床/46排刀机/排刀机车铣采购需要多少钱

随着“中国制造2025”战略的深入推进与产业升级浪潮,湖北省作为华中地区重要的制造业基地,对高精度、高效率、高复合化加工设备的需求日益旺盛。车铣复合加工中心,以其“一次装夹,完成全部工序”的突出优势,正成为…

API密钥与令牌管理漏洞:现代应用命脉的攻防实践

第一部分&#xff1a;开篇明义 —— 定义、价值与目标 定位与价值 在数字化血液——数据——于现代应用架构中奔流不息的今天&#xff0c;API&#xff08;应用程序编程接口&#xff09; 已成为系统间对话的核心语言。而API密钥与访问令牌&#xff0c;正是这场对话的“通行证”…

震憾史实:ANSI终端颜色渲染编码系统规则『不用记忆』(梦幻精灵_cq精心整理)

您不用纠结ansi-color-code的规则难记&#xff0c;其实它简单到『不用记忆』。&#x1f609; 16色&#xff1a;12-int 3[9]前景4[10]背景&#xff0c;基础color-code&#xff0c;0-7八色。 256&#xff1a;5-8个int 一个字符串’3[4]8;5;[0-255]’ 24位真彩&#xff1a;6-9个…

PostgreSQL 实战:一文掌握如何优雅的进行递归查询?

文章目录 一、递归查询基础&#xff1a;CTE 与 WITH RECURSIVE1.1 什么是 CTE&#xff08;Common Table Expression&#xff09;&#xff1f;1.2 递归 CTE 的基本结构1.3 递归查询的建议 二、经典场景实战&#xff1a;组织架构查询2.1 查询“技术部”及其所有子部门&#xff08…

PostgreSQL 实战:详解 UPSERT(INSERT ON CONFLICT)

文章目录 一、UPSERT 基础1.1 为什么需要UPSERT&#xff1f;- 传统方案的缺陷1.2 替代方案对比1.3 跨数据库兼容性1.4 UPSERT 使用建议 二、基本使用2.1 核心语法&#xff1a;INSERT ... ON CONFLICT2.2 突目标&#xff08;Conflict Target&#xff09;详解2.3 返回结果&#x…

爬虫部署:从零到一讲述 Supervisor 的详细使用

更多内容请见: 《爬虫和逆向教程》 - 专栏介绍和目录 文章目录 一、为什么需要 Supervisor? 1.1 爬虫运行的典型痛点 1.2 Supervisor 的核心价值 1.3 替代方案对比 1.4 Supervisor 部署建议 二、安装与基础配置 2.1 安装 Supervisor 2.2 主配置文件结构 2.3 启动 Supervisor …

函数指针的初级学习

函数指针 函数指针是什么? 函数指针即为结合函数和指针,让函数也存在地址,并且让函数指针来存储函数的地址 函数指针有什么用? 注:(AI生成,仅供参考,目前我还没有用到函数指针)灵活切换执行逻辑:不用修改核心…