SpringCloud快速入门(3)---- 创建微服务项目

1. 项目工程目录

这张图是一个 SpringCloud 多模块项目依赖结构图,是我们入门微服务时最常用的项目工程骨架。

  • **顶层父工程:cloud-demo:**这是整个项目的根模块,主要负责统一管理版本依赖,解决了微服务中最常见的依赖冲突问题。定义了 SpringBoot、SpringCloud、SpringCloud Alibaba 的版本号,并通过 dependencyManagement 标签统一管理。所有子模块都继承这个父工程,就不用再单独声明版本号了,避免了不同模块依赖版本不一致的问题。
  • **公共依赖模块:services(管理微服务):**这是一个被所有业务服务继承的父模块,作用是封装所有微服务都需要的公共依赖。例如:SpringWeb、MyBatis、Lombok、Nacos 客户端、OpenFeign 等。业务服务只需要继承 services 模块,就能自动获得这些公共依赖,减少重复配置。
  • **业务微服务模块:**service-product、service-order 等这些是真正的业务模块,每个模块代表一个独立的微服务。service-product:商品服务,处理商品相关的业务逻辑。service-order:订单服务,处理订单相关的业务逻辑。它们继承了 services 模块,间接继承了 cloud-demo 父工程,因此能享受到统一的版本管理和公共依赖。

继承关系:service-product → services → cloud-demo业务服务模块继承 services,services 再继承 cloud-demo。

这种结构的核心优势:

  • 统一版本管理:所有框架版本在父工程中统一控制,从根源避免依赖冲突。
  • 依赖复用:公共依赖只在 services 模块声明一次,所有业务服务直接继承,减少重复代码。
  • 模块化解耦:每个业务模块独立开发、编译、打包,互不影响,符合微服务 "高内聚、低耦合" 的思想。

2. 创建项目

1.1 创建父项目cloud-demo

创建完成之后我们需要修改项目的pom:

XML 复制代码
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<!-- 重点:父项目必须是 pom 打包方式 -->
	<packaging>pom</packaging>
	<groupId>com.ting.study</groupId>
	<artifactId>cloud-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>cloud-demo</name>
	<description>cloud-demo</description>
	<properties>
		<!-- Java版本,springCloud 和springCloudAlibaba版本-->
		<maven.compiler.source>17</maven.compiler.source>
		<maven.compiler.target>17</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<!-- <parent> 已经指定了 Spring Boot 版本,这里就不需要了 -->
		<!-- <spring.boot.version>3.3.4</spring.boot.version>-->
		<spring.cloud.version>2023.0.3</spring.cloud.version>
		<spring.cloud.alibaba.version>2023.0.3.2</spring.cloud.alibaba.version>
	</properties>
	<!-- dependencyManagement:依赖版本管理,子模块继承时不会自动引入,只会统一版本 -->
	<dependencyManagement>
		<dependencies>
			<!-- Spring Cloud 依赖 -->
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring.cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>

			<!-- <parent> 已经指定了 Spring Boot 版本,这里就不需要了 -->
<!--			<dependency>-->
<!--				<groupId>org.springframework.boot</groupId>-->
<!--				<artifactId>spring-boot-dependencies</artifactId>-->
<!--				<version>${spring.boot.version}</version>-->
<!--				<type>pom</type>-->
<!--				<scope>import</scope>-->
<!--			</dependency>-->

			<!-- Spring Cloud Alibaba 依赖 -->
			<dependency>
				<groupId>com.alibaba.cloud</groupId>
				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
				<version>${spring.cloud.alibaba.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<!-- 子模块会在这里自动生成,不用手动写 -->

<!--	父项目是 pom 类型,只用来管理版本、管理子模块
		不写代码、不运行、不打包
		不需要 SpringBoot 打包插件-->
<!--	<build>-->
<!--		<plugins>-->
<!--			<plugin>-->
<!--				<groupId>org.springframework.boot</groupId>-->
<!--				<artifactId>spring-boot-maven-plugin</artifactId>-->
<!--			</plugin>-->
<!--		</plugins>-->
<!--	</build>-->

</project>

这里要注意:父项目打包方式是 <packaging>pom</packaging>不写业务代码、不启动、不打成可运行 jar只做两件事:统一管理、收纳子模块

所以父项目只保留pom文件即可

2.2 创建services

注意这里选择新建模块而不是spring项目,父项目本身已经基于 SpringBoot 构建,内置了 spring-boot-starter-parent 版本管理。子项目直接继承父工程即可统一版本。如果子项目创建时也勾选为 SpringBoot 项目,会再次重复继承一层 spring-boot-starter-parent,造成依赖嵌套混乱、版本冗余冲突。

services = 中间层公共父模块 作用:把所有微服务(order、product、user...)都要用到的依赖,统一放在这里,让子模块不用重复引,同样不需要写代码需要把打包方式改为pom:

XML 复制代码
<?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>com.ting.study</groupId>
        <artifactId>cloud-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <packaging>pom</packaging>
    <artifactId>services</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

2.3 创建服务

创建成功后我们可以在services中引入公共依赖来测试是否正确:

可以看到在services中引入了nacos和openfeign后,product和order中也同时出现了nacos

相关推荐
Amctwd1 小时前
【Python】从Excel中按行提取图片
java·python·excel
啃臭1 小时前
AOP和反射
java·spring boot
西凉的悲伤1 小时前
java 使用PNG图片隐写文件
java·图片隐写·png
有梦想的小何1 小时前
Cursor AI 编程实战(篇一):Prompt 与案例总结
java·linux·prompt·ai编程
河阿里2 小时前
SpringBoot:Spring Task定时任务完整使用教学
java·spring boot·spring
jiayong232 小时前
Tool Permission 与 Sandbox 的安全流水线:Agent 工具系统的工程边界
java·数据库·安全·agent
rururunu2 小时前
Windows 下切换 Java 环境太复杂了,我做了个 cli 工具,可以快速安装,切换 Java 版本
java
qq_452396232 小时前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
澈2072 小时前
二叉搜索树:高效增删查的秘诀
java·开发语言·算法