6.8、Spring Cloud Alibaba项目初始化
Spring Cloud Alibaba 项目初始化
初始化 Spring Cloud Alibaba 项目是使用微服务组件的第一步。本节将学习如何初始化 Spring Cloud Alibaba 项目。
本节将学习:父 POM 配置、依赖管理、版本选择,以及项目结构。
更新父 POM 配置
在上一章创建的基础父项目基础上,我们需要添加 Spring Cloud Alibaba 的依赖管理。
完整的父 POM 配置
文件路径: mall-microservices/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> <groupId>com.mall</groupId> <artifactId>mall-microservices</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <name>Mall Microservices Parent</name> <description>微服务商城父项目</description> <modules> <module>user-service</module> <module>product-service</module> <module>order-service</module> <module>payment-service</module> <module>inventory-service</module> <module>gateway-service</module> </modules> <properties> <java.version>21</java.version> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- Spring Boot 版本 --> <spring-boot.version>3.2.0</spring-boot.version> <!-- Spring Cloud 版本 --> <spring-cloud.version>2023.0.0</spring-cloud.version> <!-- Spring Cloud Alibaba 版本 --> <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version> <!-- 其他依赖版本 --> <mybatis-plus.version>3.5.5</mybatis-plus.version> <mysql.version>8.0.33</mysql.version> <lombok.version>1.18.30</lombok.version> <hutool.version>5.8.23</hutool.version> </properties> <dependencyManagement> <dependencies> <!-- 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 依赖管理 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.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> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!-- MySQL --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>${mysql.version}</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!-- Hutool --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> </plugin> </plugins> </pluginManagement> </build> </project>
版本兼容性说明
版本兼容性矩阵:
| Spring Boot | Spring Cloud | Spring Cloud Alibaba | Java |
|---|---|---|---|
| 3.2.0 | 2023.0.0 | 2022.0.0.0 | 17+ |
| 3.1.x | 2022.0.x | 2021.0.5.0 | 17+ |
| 2.7.x | 2021.0.x | 2021.0.5.0 | 8+ |
我们选择的版本组合:
- Spring Boot 3.2.0
- Spring Cloud 2023.0.0
- Spring Cloud Alibaba 2022.0.0.0
- Java 21
这个组合是当前最新的稳定版本,支持 Java 21 的所有新特性。
Spring Cloud Alibaba 组件依赖
核心组件依赖说明
Spring Cloud Alibaba 包含以下核心组件:
- Nacos:服务注册与发现、配置中心
- Sentinel:流量控制、熔断降级
- Seata:分布式事务
- RocketMQ:消息队列
- Dubbo:RPC 框架
- Spring Cloud Gateway:API 网关(Spring Cloud 官方)
各服务模块依赖配置
用户服务依赖(示例)
文件路径: mall-microservices/user-service/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>com.mall</groupId> <artifactId>mall-microservices</artifactId> <version>1.0.0</version> </parent> <artifactId>user-service</artifactId> <name>User Service</name> <description>用户服务</description> <dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Nacos 服务发现(将在第7章添加) --> <!-- <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> --> <!-- Nacos 配置中心(将在第10章添加) --> <!-- <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> --> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <!-- MySQL --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- Spring Boot Actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- Spring Security (用于密码加密) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
依赖添加说明
依赖添加原则:
- 按需添加:根据章节进度逐步添加依赖
- 版本统一:所有依赖版本由父 POM 统一管理
- 避免冲突:使用
dependencyManagement管理版本
后续章节将添加的依赖:
- 第7章:
spring-cloud-starter-alibaba-nacos-discovery - 第8章:
spring-cloud-starter-loadbalancer - 第9章:
spring-cloud-starter-openfeign - 第10章:
spring-cloud-starter-alibaba-nacos-config - 第11章:
spring-cloud-starter-alibaba-sentinel - 第12章:
spring-cloud-alibaba-seata - 第13章:
spring-cloud-starter-gateway
版本选择与验证
版本选择原则
版本选择原则:
- 兼容性优先:确保 Spring Boot、Spring Cloud、Spring Cloud Alibaba 版本兼容
- 稳定性优先:选择经过验证的稳定版本
- 功能完整:确保所需功能在选择的版本中可用
- 长期支持:优先选择 LTS 版本
版本兼容性验证
验证版本兼容性的方法:
-
查看官方文档:
- Spring Cloud Alibaba 官网:https://github.com/alibaba/spring-cloud-alibaba/wiki
- 查看版本兼容性矩阵
-
查看依赖关系:
mvn dependency:tree -
测试启动:
- 创建测试项目
- 添加依赖
- 验证是否能正常启动
版本锁定策略
版本锁定方式:
-
在父 POM 中定义版本属性:
<properties> <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version> </properties> -
使用 dependencyManagement:
<dependencyManagement> <dependencies> <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>
- 子模块不指定版本:
<!-- 子模块中不指定版本,使用父 POM 管理的版本 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
项目结构
完整的项目结构
商城微服务项目结构:
mall-microservices/
├── pom.xml # 父 POM
├── user-service/ # 用户服务
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/mall/userservice/
│ │ ├── UserServiceApplication.java
│ │ ├── controller/
│ │ ├── service/
│ │ ├── mapper/
│ │ └── entity/
│ └── resources/
│ ├── application.yml
│ └── db/
│ └── user_db.sql
├── product-service/ # 商品服务
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/mall/productservice/
│ └── resources/
│ ├── application.yml
│ └── db/
│ └── product_db.sql
├── order-service/ # 订单服务
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/mall/orderservice/
│ └── resources/
│ ├── application.yml
│ └── db/
│ └── order_db.sql
├── payment-service/ # 支付服务(后续添加)
├── inventory-service/ # 库存服务(后续添加)
└── gateway-service/ # 网关服务(第13章添加)
项目结构说明
各目录说明:
-
父项目(mall-microservices):
- 统一管理所有子模块
- 统一管理依赖版本
- 不包含业务代码
-
子服务模块:
- 每个服务都是独立的 Spring Boot 应用
- 拥有独立的数据库
- 可以独立部署和扩展
-
代码组织:
controller:REST API 控制器service:业务逻辑层mapper:数据访问层entity:实体类config:配置类common:公共类
模块依赖关系
验证项目初始化
验证步骤
验证项目是否初始化成功:
-
编译项目:
cd mall-microservices mvn clean compile -
检查依赖:
mvn dependency:tree -
启动服务:
cd user-service mvn spring-boot:run
常见问题
可能遇到的问题:
-
版本冲突:
- 问题:依赖版本冲突
- 解决:检查父 POM 中的版本配置,确保版本兼容
-
编译失败:
- 问题:Java 版本不匹配
- 解决:确保使用 Java 21,检查
java.version配置
-
依赖下载失败:
- 问题:Maven 仓库连接问题
- 解决:配置 Maven 镜像,使用阿里云镜像
Maven 镜像配置
配置 Maven 镜像(可选):
文件路径: ~/.m2/settings.xml
<settings> <mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> </settings>
官方资源
根据 Spring Cloud Alibaba 快速开始指南 和 版本兼容性说明:
-
快速开始:官方文档提供了详细的快速开始指南,包括如何添加依赖、如何配置、如何启动第一个 Spring Cloud Alibaba 应用。文档强调,使用 BOM(Bill of Materials)可以统一管理所有组件的版本,避免版本冲突。
-
版本兼容性:官方文档明确列出了 Spring Cloud Alibaba 与 Spring Boot、Spring Cloud 的版本对应关系。例如,
2022.0.0.0版本要求 Spring Boot 3.0.x 和 Spring Cloud 2022.0.x。选择不兼容的版本组合会导致依赖冲突或功能异常。 -
依赖管理:官方推荐使用
spring-cloud-alibaba-dependenciesBOM 来管理依赖版本,这样可以确保所有 Spring Cloud Alibaba 组件的版本一致,避免版本冲突问题。
参考资源:
- Spring Cloud Alibaba 快速开始:https://github.com/alibaba/spring-cloud-alibaba/wiki
- 版本兼容性说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
- Spring Cloud 官方文档:https://spring.io/projects/spring-cloud
本节小结
在本节中,我们完成了 Spring Cloud Alibaba 项目初始化:
第一个是更新父 POM 配置。 在上一章创建的基础项目上,添加了 Spring Cloud 和 Spring Cloud Alibaba 的依赖管理。
第二个是依赖管理配置。 配置了完整的依赖管理,包括 Spring Boot、Spring Cloud、Spring Cloud Alibaba 等。
第三个是版本选择与验证。 选择了兼容的版本组合,并说明了如何验证版本兼容性。
第四个是项目结构说明。 明确了项目的完整结构,包括各模块的职责和组织方式。
第五个是验证项目初始化。 提供了验证步骤和常见问题解决方案。
这就是 Spring Cloud Alibaba 项目初始化。完成初始化后,我们的项目已经准备好集成 Spring Cloud Alibaba 的各个组件了。在下一章,我们将学习 Nacos 服务注册与发现,并实际集成到我们的商城项目中。