当前位置: 首页 > news >正文

Spring Cloud微服务多模块架构:父子工程搭建实践

一、前言

在现代微服务架构中,Spring Cloud 提供了一整套工具和技术栈来简化分布式系统的开发。为了更好地组织和管理复杂的微服务项目,使用 Maven 多模块(父子工程) 是一种高效的方法。

父子工程 是 Maven 中的一种项目结构,通过一个父项目(Parent Project)管理和多个子项目(Module)。父项目定义了所有子项目的通用配置和依赖,而子项目则继承这些配置并实现具体的功能模块。

主要优点

  • 统一管理依赖: 所有子项目共享相同的依赖版本。
  • 集中配置: 集中管理插件、属性和其他配置。
  • 简化构建过程: 使用一个命令即可构建所有子项目。
  • 提高可维护性: 修改配置或依赖只需在一个地方进行。

本文将详细介绍如何使用 Maven 创建一个 Spring Cloud 父子工程,并展示其结构和配置方法。

1cf419e3-fafe-4405-8081-7275efe4b685

二、项目结构概述

假设你要创建一个 Spring Cloud 项目,其中有一个父工程和多个子工程。项目结构大致如下:

spring-cloud-parent
│
├── pom.xml               # 父模块 POM 文件
├── spring-cloud-api      # 子模块:共享 API
│   └── pom.xml
├── spring-cloud-service  # 子模块:微服务模块
│   └── pom.xml
└── spring-cloud-config   # 子模块:配置模块└── pom.xml

版本选择

Spring Cloud https://spring.io/projects/spring-cloud

由于Spring Cloud管理的微服务架构众多,为了让自己不用在项目后期解决环境冲突问题,请严格按照官网给出的 boot 与cloud 对应关系进行选型。

粗略

image

详细版本查看

Spring Cloud https://spring.io/projects/spring-cloud#learn

image

image

由官网可知,与2023.0.4最为搭配的是Spring Boot 3.2.12 版本

‍三、创建步骤

3.1 创建父工程

新建项目

使用IDEA开发工具

image

选择一个最简单的 site模板

image

image

image

初始化

image

删除src等目录

创建完成后,删除src等目录,只留下pom文件(父工程只起一个聚合子项目的作用,实际过程中并不会打包运行)

image

image

image

配置父 pom.xml

父工程中pom.xml​ 文件将会作为所有子模块的父 POM,管理共享依赖和插件配置。

添加打包类型标签,注意设置 <packaging>​ 为 pom​,表示这是一个聚合项目。

 <packaging>pom</packaging> 

image

添加依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>spring-cloud-org</module><module>spring-cloud-finance</module><!-- 添加其他模块 --></modules><dependencyManagement><dependencies><!-- 定义Spring Boot版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.12</version> <!-- 根据需要调整版本号 --><type>pom</type><scope>import</scope></dependency><!-- 定义Spring Cloud版本 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2023.0.4</version> <!-- 根据需要调整版本号 --><type>pom</type><scope>import</scope></dependency><!-- 其他公共依赖项 --></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

参考:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>spring-cloud-parent</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>modules/module-service-a</module><module>modules/module-service-b</module><!-- 添加其他模块 --></modules><dependencyManagement><dependencies><!-- 定义Spring Boot版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.1.5</version> <!-- 根据需要调整版本号 --><type>pom</type><scope>import</scope></dependency><!-- 定义Spring Cloud版本 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2022.0.4</version> <!-- 根据需要调整版本号 --><type>pom</type><scope>import</scope></dependency><!-- 其他公共依赖项 --></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

3.2 子项目创建

创建子项目

image

image

image

image

image

子pom添加依赖

   <parent><groupId>org.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version></parent>   <dependencies><!-- 添加特定于服务的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 更多依赖项 --></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

image

完整参考:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.example</groupId><artifactId>spring-cloud-demo</artifactId><version>1.0-SNAPSHOT</version></parent><groupId>org.example</groupId><artifactId>spring-cloud-org</artifactId><version>1.0-SNAPSHOT</version><name>spring-cloud-org</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.release>17</maven.compiler.release></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><scope>test</scope></dependency><!-- Optionally: parameterized tests support --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope></dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --><plugin><artifactId>maven-clean-plugin</artifactId><version>3.4.0</version></plugin><!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.3.1</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>3.3.0</version></plugin><plugin><artifactId>maven-jar-plugin</artifactId><version>3.4.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>3.1.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>3.1.2</version></plugin><!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --><plugin><artifactId>maven-site-plugin</artifactId><version>3.12.1</version></plugin><plugin><artifactId>maven-project-info-reports-plugin</artifactId><version>3.6.1</version></plugin></plugins></pluginManagement></build>
</project>

image

修改主启动类

image

image

@SpringBootApplication
public class OrgApplication {public static void main(String[] args) {SpringApplication.run(OrgApplication.class, args);}
}

新增配置文件application.yml

新建resource资源目录

image

image

新增配置文件application.yml

image

image

server:port: 9922spring:application:name: spring-cloud-org  

子项目启动测试

image

至此一个子项目搭建完成,同理根据需要搭建其它模块,完成一个微服务父子项目的搭建

通过本文的介绍,我们已经深入了解了如何在 Spring Cloud 中创建父子工程结构,并探讨了这种结构的优势。利用父子工程,开发者能够更好地管理微服务项目的依赖关系、共享配置,并且可以通过统一的版本管理减少版本冲突和重复劳动。如果你有更多关于 Spring Cloud 或微服务架构的问题,欢迎继续探索和讨论!

相关文章:

Spring Cloud微服务多模块架构:父子工程搭建实践

一、前言 在现代微服务架构中&#xff0c;Spring Cloud 提供了一整套工具和技术栈来简化分布式系统的开发。为了更好地组织和管理复杂的微服务项目&#xff0c;使用 Maven 多模块&#xff08;父子工程&#xff09; 是一种高效的方法。 ‍ 父子工程 是 Maven 中的一种项目结构…...

SkinnedMeshRenderer相关知识

SkinnedMeshRenderer和MeshRenderer unity中SkinnedMeshRenderer是CPU去更改顶点位置的。 而当使用MeshRenderer时&#xff0c;可以靠GPU来进行蒙皮&#xff08;即更改顶点位置&#xff09;。 SkinnedMeshRenderer是多线程处理的&#xff0c;在小程序游戏中&#xff0c;只支持…...

前端学习DAY30(水平)

子元素是在父元素的内容区中排列的&#xff0c;如果子元素的大小超过了父元素&#xff0c;则子元素会从 父元素中溢出&#xff0c;使用overflow属性设置父元素如何处理溢出的子元素 可选值&#xff1a;visible 默认值&#xff0c;子元素会从父元素中溢出&#xff0c;在父元素外…...

Spring boot 项目 Spring 注入 代理 并支持 代理对象使用 @Autowired 去调用其他服务

文章目录 类定义与依赖注入方法解析createCglibProxy注意事项setApplicationContext 方法createCglibProxy 方法 类定义与依赖注入 Service: 标识这是一个 Spring 管理的服务类。ApplicationContextAware: 实现该接口允许你在类中获取 ApplicationContext 对象&#xff0c;从而…...

Colyseus 与 HTTP API 的集成

Colyseus 与 HTTP API 的集成 在使用 Colyseus 开发实时多人应用时&#xff0c;通常需要与传统的 HTTP API 集成&#xff0c;例如用户身份验证、存储游戏数据、获取排行榜等。以下是 Colyseus 与 HTTP API 集成的详细介绍&#xff1a; 1. Colyseus 的基本架构 Colyseus 是一个…...

基于服务器部署的综合视频安防系统的智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。国产化人工智能“…...

SpringBoot原理分析-1

SpringBoot原理分析 作为一个javaer&#xff0c;和boot打交道是很常见的吧。熟悉boot的人都会知道&#xff0c;启动一个springboot应用&#xff0c;就是用鼠标点一下启动main方法&#xff0c;然后等着就行了。我们来看看这个main里面。 SpringBootApplication public class E…...

HCIA-Access V2.5_7_5_XG(S)- GPON网络演进为XG(S)-PON网络

目前由于10 GPON ONU数量并没有得到大规模爆发,所以直接新建ODN网络成本相对较高,所以可以采用复用ODN的方案。 XG(S)-PON可以与GPON共享ODN 前面也介绍过GPON和10G GPON使用的波长,我们来回顾一下,在GPON网络中上行采用1310纳米波长,下行采用1490纳米的波长,而10G GPON…...

GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程

大家好&#xff0c;今天给大家介绍一下&#xff1a;GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程。 文章目录 一、GPU算力平台概述人工智能智能发展为什么需要GPU算力平台 二、注册与登录账号注册流程 三、平台的应用之Anydoor应用启动器选择Anydoor的应用场景Anydoo…...

如何利用人工智能算法优化知识分类和标签?

如何利用人工智能算法优化知识分类和标签&#xff1f; 聚类算法 原理与应用&#xff1a; 聚类算法是一种无监督学习算法&#xff0c;它可以根据数据的相似性将知识内容自动划分成不同的类别。例如&#xff0c;在文档知识库中&#xff0c;通过对文档内容的词向量表示应用 K -…...

Windows 11 系统中npm-cache优化

在 Windows 11 系统中&#xff0c;C:\Users\K\AppData\Local\npm-cache 文件夹是 npm&#xff08;Node Package Manager&#xff09; 用于缓存已下载的包的目录。缓存的存在可以加快包的安装速度&#xff0c;因为当再次安装相同的包时&#xff0c;npm 可以直接从缓存中获取&…...

Flink使用

Window下启动支持 下载或复制老版本的放在bin目录下即可&#xff1b; flink.bat echo off setlocalSET bin%~dp0 SET FLINK_HOME%bin%.. SET FLINK_LIB_DIR%FLINK_HOME%\lib SET FLINK_PLUGINS_DIR%FLINK_HOME%\pluginsSET JVM_ARGS-Xmx512mSET FLINK_JM_CLASSPATH%FLINK_LI…...

简易屏幕共享工具-基于WebSocket

前面写了两个简单的屏幕共享工具&#xff0c;不过那只是为了验证通过截屏的方式是否可行&#xff0c;因为通常手动截屏的频率很低&#xff0c;而对于视频来说它的帧率要求就很高了&#xff0c;至少要一秒30帧率左右。所以&#xff0c;经过实际的截屏工具验证&#xff0c;我了解…...

Redis——主从复制模式

文章目录 1. 引入2. 主从复制模式2.1 概念2.2 配置2.3 原理2.3.1 建立连接阶段2.3.2 命令传播阶段2.3.3 心跳检测机制2.3.4 部分重同步机制(1) 主节点通过 复制积压缓冲区 记录写命令(2) 主节点通过 复制偏移量 判断从节点是否满足执行部分重同步的条件(3) 执行部分重同步操作 …...

简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩

系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对…...

阿里云电商平台用户行为分析与人群画像系统设计与实现

通过在阿里云&#xff08;https://baike.baidu.com/item/%E9%98%BF%E9%87%8C%E4%BA%91/297128&#xff09;上构建包含数据源层、数据存储层、数据处理层、数据分析层和数据应用层的系统架构&#xff0c;并设计合理的数据模型、ETL流程、数据质量与性能监控机制以及安全与合规性…...

Go语言的 的输入/输出流(I/O Streams)核心知识

Go语言的输入/输出流&#xff08;I/O Streams&#xff09;核心知识 前言 Go语言是一种现代编程语言&#xff0c;因其高效性、简洁性及强大的并发支持而受到开发者的喜爱。在开发应用程序时&#xff0c;输入/输出&#xff08;I/O&#xff09;操作是一个不可或缺的部分。无论是…...

57.在 Vue 3 中使用 OpenLayers 点击选择 Feature 设置特定颜色

在 Web 开发中&#xff0c;地图应用是非常常见的需求&#xff0c;而 OpenLayers 是一个非常强大的地图库&#xff0c;它提供了丰富的地图操作功能。今天&#xff0c;我们将一起学习如何在 Vue 3 中结合 OpenLayers 使用点击事件来选择地图上的 Feature&#xff0c;并设置特定的…...

数据结构C语言描述8(图文结合)--哈希、哈希冲突、开放地址法、链地址法等实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…...

自动化立体库安全使用管理制度完整版

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。欢迎大家到本文底部评论区留言。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载。 以下是《…...

空洞骑士模组管理终极指南:Scarab一键安装与智能依赖解析

空洞骑士模组管理终极指南&#xff1a;Scarab一键安装与智能依赖解析 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》设计的开源模组管理器&…...

从Urbannav真值话题到NavSatFix:手把手教你转换GPS数据格式用于ROS定位评估

从Urbannav真值到NavSatFix&#xff1a;ROS定位评估中的GPS数据格式转换实战 在自动驾驶和机器人定位领域&#xff0c;数据格式的统一性常常成为算法评估中的"最后一公里"难题。当我们使用Urbannav这类专业数据集进行多传感器融合定位算法的精度评估时&#xff0c;经…...

VLA 边缘感知决策:Deepoc 开发板强化机械狗灾后救援自主作业能力

在地震废墟、火灾现场、洪水灾区等无定位、弱通信、地形极端的灾后救援场景中&#xff0c;四足机器人的自主作业能力仍存在明显技术瓶颈。传统方案高度依赖预建地图与稳定通信&#xff0c;在环境坍塌、结构非结构化的区域易出现定位漂移、路径失效等问题&#xff0c;难以支撑救…...

保姆级教程:用Charades数据集复现行为识别模型(附PyTorch代码与避坑指南)

从零构建Charades行为识别模型&#xff1a;PyTorch实战与调优全攻略 在计算机视觉领域&#xff0c;行为识别一直是极具挑战性的研究方向。不同于静态图像分类&#xff0c;视频行为识别需要模型理解时间维度的信息变化&#xff0c;这对算法设计和工程实现都提出了更高要求。Char…...

终极指南:5步掌握ABAP Excel生成神器abap2xlsx

终极指南&#xff1a;5步掌握ABAP Excel生成神器abap2xlsx 【免费下载链接】abap2xlsx Generate your professional Excel spreadsheet from ABAP 项目地址: https://gitcode.com/gh_mirrors/ab/abap2xlsx 还在为SAP报表导出Excel而头疼吗&#xff1f;告别OLE组件依赖&a…...

【SITS2026实战白皮书】:AI广告创意生成的5大落地陷阱与企业级避坑指南

第一章&#xff1a;SITS2026实战白皮书&#xff1a;AI广告创意生成的5大落地陷阱与企业级避坑指南 2026奇点智能技术大会(https://ml-summit.org) 企业在部署AI广告创意生成系统时&#xff0c;常因忽视工程化约束与业务语义鸿沟而陷入“高POC成功率、低线上ROI”的困境。SITS2…...

题解:洛谷 P1073 [NOIP 2009 提高组] 最优贸易

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

题解:洛谷 AT_abc066_a [ABC066A] ringring

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

源代码论文分享|做“系统设计与实现”类题目时,真的很需要这种成套资料!

很多人做课程设计、毕业设计时&#xff0c;最难的不是“不会写”&#xff0c;而是不知道一篇完整的“系统设计与实现”到底该长什么样&#xff1a;论文怎么展开&#xff0c;代码怎么组织&#xff0c;功能怎么落地&#xff0c;截图和结构图放到哪里才顺。 我自己当年做这类题目的…...

从“精读”到“泛用”:构建个人专属的英语学习策略体系

1. 为什么传统英语学习方法总是失效&#xff1f; 我见过太多人抱着厚厚的单词书从A背到Z&#xff0c;结果三个月后连"abandon"都拼不全。也遇到过每天刷两小时语法题的同学&#xff0c;碰到外国同事打招呼却只能挤出"Fine, thank you"。问题出在哪&#xf…...