SpringCloud_1:父子工程创建

发布时间:2026/9/10 13:51:33

SpringCloud_1:父子工程创建 目录一、在SpringBoot上建立SpringCloud二、创建父子工程三、每个模块升级成SpringBootWeb项目四、总结一、在SpringBoot上建立SpringCloud我们前边创建过SpringBoot项目都会引入一个前缀为springboot-starter-的依赖例如创建一个项目pom文件中就包含parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version4.0.2/version relativePath/ !-- lookup parent from repository -- /parent我这里的springBoot版本号是4.0.2,我们ctrl点击artifactId后逐层进入父pom会看到一个巨大的“版本仲裁中心”这里存放了很多依赖的版本号这也让我们先前在引入依赖时没有去指定版本号因为这里面存放的就是推荐版本。比如我们熟知的mysql依赖但是没有springcloud依赖的版本但是springcloud又是在springBoot之上建立的。所以在springboot项目上创建springcloud项目需要引入springcloud依赖。这个时候我们有多种选择可以选择引入官方SpringCloud、SpringCloud Alibaba、等其他微服务生态。他们都集成了所必须的组件例如服务注册和发现等。阿里巴巴生态是国内的主流选择集成Nacos、Sentinel等阿里开源组件。如果你想要使用netflix OSS组件那么你也可以引入官方Spring Cloud.更多时候我们都是结合着用的。值得注意的是我们此时导入的是一个SpringCloud生态是一个BOM物料清单而非jar包。需要将其放到dependencyManagement节点下这里面并不含有任何业务代码只是一份依赖清单。所以导入时要指定类型为pom明确这是个“元数据”不是代码。其次就是作用域为import,这样只要子项目引入后就能把仓库里面所有的版本声明全部复制到当前项目的dependencyManagement中了。不同的作用域有不同作用作用域编译测试运行compile(默认)生效生效生效test生效provided生效生效runtime生效生效import(只能给BOM用)---SpringBoot版本不同需要引入的cloud依赖版本也不同。针对这个问题可以查看官方手册。官方SpringCloud版本SpringCloud官方阿里巴巴SpringCloud版本SpringCloud阿里巴巴dependencyManagement dependencies !--官方SpringCloud-- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version2025.1.0/version typepom/type scopeimport/scope /dependency !--阿里巴巴SpringCloud-- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version2025.1.0.0/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement当你引入了任何一个他们包含的jar包时才可以使用同样的方式ctrl点击artifactId看到一些版本配置信息这些都是推荐的版本。里面有我们经常使用的Openfeign和Gateway,阿里巴巴BOM中还有我们会使用的nacos等组件。二、创建父子工程之前我们的应用程序是单体架构现在我们需要把它拆分成分布式微服务架构。这样做的好处是将服务进行拆分分别部署到不同服务器上减轻单个服务器的压力单个服务发生宕机不会导致整体服务不可用提高了稳定性按照业务拆分进行解耦降低业务耦合在多人开发中有利于分工合作。例如博客服务可以简单分为这么三类用户服务博客服务和网关服务。用父子工程的方式将其管理起来就构成了分布式架构。这三个服务可以分别部署在不同的机器上和不同的端口上。Common作为公共组件为其他服务提供工具。本身不是服务不含启动类。到时候每个服务的jar包打完都会含有一个common jar包用来为自己的程序服务。我们先创建父工程创建一个Maven空项目删除掉src目录因为我们并不需要在父工程下写任何业务代码,所以父工程必须打包成pom。在pom文件中添加如下配置这样方便我们管理依赖不会发生版本冲突。?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.miao/groupId artifactIdspring-cloud-blog/artifactId version1.0-SNAPSHOT/version !-- 声明父工程的打包方式为pom -- packagingpom/packaging modules moduleblog-info/module moduleuser-info/module modulegateway-service/module moduleblog-common/module /modules !-- 完善依赖 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.1.6/version relativePath/ !-- lookup parent from repository -- /parent properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target java.version17/java.version mybatis.version3.0.3/mybatis.version mysql.version8.0.33/mysql.version mysql.plus.version3.5.5/mysql.plus.version spring-cloud.version2022.0.3/spring-cloud.version spring-cloud-alibaba.version2022.0.0.0-RC2/spring-cloud-alibaba.version /properties !--所有子项目都会继承的依赖-- dependencies dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies !-- 依赖管理 不会给父工程、子模块引入任何 jar 包 只定义好「依赖坐标 固定版本」 子模块需要用到某个依赖时只需要写 groupId、artifactId省略 version自动继承父工程这里约定好的版本 -- dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type scopeimport/scope /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring-cloud-alibaba.version}/version typepom/type scopeimport/scope /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version${mybatis.version}/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-spring-boot3-starter/artifactId version${mysql.plus.version}/version /dependency dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version${mysql.version}/version /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter-test/artifactId version${mybatis.version}/version scopetest/scope /dependency /dependencies /dependencyManagement /project父工程打包成pom后这样指定的modules才会被识别到注意先创建模块才会出现modules这样整个组织结构才得以建立。我们还在pom文件中提前约定了版本号这是一组非常稳定的组合后续依赖均使用这组版本号不会导致混乱。需要注意父工程里的dependencies会被子项目所继承例如Lombok而dependencyManagement则不会被继承例如mybatis它只是声明了依赖信息包括版本号作用域等。后续子项目需要引入依赖时才会被引入这个时候就会按照我们约定好的配置去引入依赖。接下来只要按照我们上面的模块名创建子工程即可。可以发现子模块的Lombok依赖被隐式继承了自身pom文件中无但是依赖库里能看到。如此反复创建得到如下的目录配置文件也会显示父子关系三、每个模块升级成SpringBootWeb项目此时我们需要对网关服务、用户服务和博客服务添加SpringWeb依赖并且添加配置信息和启动类。dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId /dependencyweb来自springboot父工程的起步依赖我们的springboot版本是3.1.6所以用的是web,如果是4.0.x则要改成mvc.随后创建配置文件指定端口号那需不需要指定IP地址呢每个服务确实由IP地址端口号确定的。但是我们完全没必要去指定我们会把服务注册到nacos当我们程序跑起来时会自动向nacos上报IP地址和端口号所以不用担心别的服务找不到我们。例如先做这样的配置后续的话需要配置很多东西目前配置先这样写。接着添加启动类。然后测试是否可以成功运行控制台显示成功运行。这样我们所有的工作就做完了。后续的博客业务就在这个子目录下完成。四、总结到目前为止我们学习了分布式微服务的创建流程重要的是父项目如何管理依赖后续不会发生依赖冲突。BOM需要在dependenceManagement中声明类型为pom文件作用域为import,主要注意这些就能规避大部分错误。
延伸阅读

更多相关文章

2026/9/4 0:21:06

基于Hadoop的空气质量大数据监测系统设计与实现

1. 项目背景与核心价值 空气质量监测与分析是智慧城市建设中的重要环节。传统的气象站监测方式存在覆盖范围有限、数据更新滞后等问题,而基于互联网的公开数据源结合大数据技术,能够实现更全面、实时的空气质量评估体系。 这个项目的核心价值在于&#…

2026/9/10 13:47:51

Decision: Static site on one server

Decision: Static site on one server 【免费下载链接】US.KG Free domain registration and practical DNS learning resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/us/US.KG Context The site publishes documentation and has no account…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码