6.8Spring Cloud Alibaba项目初始化

分类: 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 BootSpring CloudSpring Cloud AlibabaJava
3.2.02023.0.02022.0.0.017+
3.1.x2022.0.x2021.0.5.017+
2.7.x2021.0.x2021.0.5.08+

我们选择的版本组合:

  • 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 包含以下核心组件:

  1. Nacos:服务注册与发现、配置中心
  2. Sentinel:流量控制、熔断降级
  3. Seata:分布式事务
  4. RocketMQ:消息队列
  5. Dubbo:RPC 框架
  6. 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>

依赖添加说明

依赖添加原则:

  1. 按需添加:根据章节进度逐步添加依赖
  2. 版本统一:所有依赖版本由父 POM 统一管理
  3. 避免冲突:使用 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

版本选择与验证

版本选择原则

版本选择原则:

  1. 兼容性优先:确保 Spring Boot、Spring Cloud、Spring Cloud Alibaba 版本兼容
  2. 稳定性优先:选择经过验证的稳定版本
  3. 功能完整:确保所需功能在选择的版本中可用
  4. 长期支持:优先选择 LTS 版本

版本兼容性验证

验证版本兼容性的方法:

  1. 查看官方文档

  2. 查看依赖关系

    mvn dependency:tree
  3. 测试启动

    • 创建测试项目
    • 添加依赖
    • 验证是否能正常启动

版本锁定策略

版本锁定方式:

  1. 在父 POM 中定义版本属性

    <properties> <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version> </properties>
  2. 使用 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>
```
  1. 子模块不指定版本
    <!-- 子模块中不指定版本,使用父 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章添加)

项目结构说明

各目录说明:

  1. 父项目(mall-microservices)

    • 统一管理所有子模块
    • 统一管理依赖版本
    • 不包含业务代码
  2. 子服务模块

    • 每个服务都是独立的 Spring Boot 应用
    • 拥有独立的数据库
    • 可以独立部署和扩展
  3. 代码组织

    • controller:REST API 控制器
    • service:业务逻辑层
    • mapper:数据访问层
    • entity:实体类
    • config:配置类
    • common:公共类

模块依赖关系

验证项目初始化

验证步骤

验证项目是否初始化成功:

  1. 编译项目

    cd mall-microservices mvn clean compile
  2. 检查依赖

    mvn dependency:tree
  3. 启动服务

    cd user-service mvn spring-boot:run

常见问题

可能遇到的问题:

  1. 版本冲突

    • 问题:依赖版本冲突
    • 解决:检查父 POM 中的版本配置,确保版本兼容
  2. 编译失败

    • 问题:Java 版本不匹配
    • 解决:确保使用 Java 21,检查 java.version 配置
  3. 依赖下载失败

    • 问题: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 快速开始指南版本兼容性说明

  1. 快速开始:官方文档提供了详细的快速开始指南,包括如何添加依赖、如何配置、如何启动第一个 Spring Cloud Alibaba 应用。文档强调,使用 BOM(Bill of Materials)可以统一管理所有组件的版本,避免版本冲突。

  2. 版本兼容性:官方文档明确列出了 Spring Cloud Alibaba 与 Spring Boot、Spring Cloud 的版本对应关系。例如,2022.0.0.0 版本要求 Spring Boot 3.0.x 和 Spring Cloud 2022.0.x。选择不兼容的版本组合会导致依赖冲突或功能异常。

  3. 依赖管理:官方推荐使用 spring-cloud-alibaba-dependencies BOM 来管理依赖版本,这样可以确保所有 Spring Cloud Alibaba 组件的版本一致,避免版本冲突问题。

参考资源

本节小结

在本节中,我们完成了 Spring Cloud Alibaba 项目初始化:

第一个是更新父 POM 配置。 在上一章创建的基础项目上,添加了 Spring Cloud 和 Spring Cloud Alibaba 的依赖管理。

第二个是依赖管理配置。 配置了完整的依赖管理,包括 Spring Boot、Spring Cloud、Spring Cloud Alibaba 等。

第三个是版本选择与验证。 选择了兼容的版本组合,并说明了如何验证版本兼容性。

第四个是项目结构说明。 明确了项目的完整结构,包括各模块的职责和组织方式。

第五个是验证项目初始化。 提供了验证步骤和常见问题解决方案。

这就是 Spring Cloud Alibaba 项目初始化。完成初始化后,我们的项目已经准备好集成 Spring Cloud Alibaba 的各个组件了。在下一章,我们将学习 Nacos 服务注册与发现,并实际集成到我们的商城项目中。