构建Spring Cloud Alibaba模板项目

第 4.8 节主要介绍了如何创建一个 Spring Boot 项目,并使用 IDEA 编辑器开发 Spring Boot 项目。根据笔者的开发经验,在新建 Spring Boot 项目时,建议开发人员使用 Spring Initializr 向导构建。因为使用该方式生成的代码比较齐全,能够避免人为错误,可以直接使用,更加节省时间。Spring Boot 项目的启动方式也列举了 IDEA 编辑器直接启动、Maven 插件启动和命令行启动三种。以上三种方式都很简单,在练习时读者可以自行选择适合自己的启动方式。

在掌握了 Spring Boot 框架的基本开发技巧后,后续的章节内容就要开始过渡到 Spring Cloud Alibaba 微服务项目开发实战。在此之前构建一个 Spring Cloud Alibaba 的基础模板项目,在后续章节中整合微服务架构的组件时,修改一下这个基础模板项目就可以直接上手开发了,非常方便。

构建 Spring Cloud Alibaba 基础模板项目的步骤如下。

先创建一个 Maven 项目,在 pom.xml 配置文件中将 packaging 设置为 pom,将 groupId 设置为 ltd.newbee.cloud。之后依次加入 Spring Boot 依赖、Spring Cloud 依赖和 Spring Cloud Alibaba 依赖。

然后新建一个模板,或者直接把之前创建的 Spring Boot 复制过来,命名为 service-demoJava 代码的包名为 ltd.newbee.cloud。在该模板的 pom.xml 配置文件中增加 parent 标签,与上层 Maven 建立好关系。

接着复制该模板为 service-demo2,并修改项目中的 application.properties 的端口号,与 service-demo 做一下区分。

最终的项目目录结构如图 4-37 所示。

image 2025 04 14 18 28 44 724
Figure 1. 图4-37 Spring Cloud Alibaba模板项目最终的目录结构

这是一个标准的 Maven 多模块父子工程,spring-cloud-alibaba-demoroot 节点,service-demoservice-demo2 为两个子节点。

其中,root 节点的 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>ltd.newbee.cloud</groupId>
    <artifactId>spring-cloud-alibaba-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-alibaba-demo</name>
    <packaging>pom</packaging>
    <description>Spring Cloud Alibaba Demo</description>

    <modules>
        <module>service-demo</module>
        <module>service-demo2</module>
    </modules>
    <properties>
        <spring.boot.version>2.6.3</spring.boot.version>
        <spring.cloud.dependencies.version>2021.0.1</spring.cloud.dependencies.version>
        <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>central</id>
            <url>https://maven.aliyun.com/repository/central/url</url>
            <name>aliyun</name>
        </repository>
    </repositories>

</project>

子节点的 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>ltd.newbee.cloud</groupId>
    <artifactId>service-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-demo</name>
    <description>Spring Cloud Alibaba Service Demo</description>

    <parent>
        <groupId>ltd.newbee.cloud</groupId>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

最后,分别启动两个子节点中的 Spring Boot 实例并访问,结果如图 4-38 所示。

代码没有报错,并且可以正常启动和访问,Spring Cloud Alibaba 模板项目就构建完成了。这个项目只是一个模板项目,并没有实际的功能开发,项目的相关配置也主要是把模板关系建立好、把 Spring Cloud Alibaba 及相关的依赖配置好。

image 2025 04 14 18 39 51 564
Figure 2. 图4-38 service01服务访问结果

本章主要讲解了基础开发环境的搭建,同时结合实际的编码帮助读者熟悉 Spring Cloud Alibaba 技术栈的基础编码,其实与日常开发的项目并没有特别大的差别,希望读者不要觉得 Spring Cloud Alibaba 微服务架构项目的开发很困难。本章设计基础代码演示的主要目的是让读者顺利地过渡到项目实战阶段,现在已经有了基础的微服务模板项目,在后续的章节再去整合微服务架构中的各个组件就比较轻松了,只需要根据不同的组件增加 pom 依赖和一些基础配置就可以了。

另外,本书使用的 MySQL 数据库版本为 5.7,为了避免出现一些问题,建议读者使用 MySQL5.7 或以上版本。在后续章节中讲解 NacosSentinelSeata 等组件的数据持久化和分布式事务的演示时都会用到 MySQL 数据库。在最终的实战项目中会使用 Redis 数据库,读者如果想尽快上手实战项目,就要在计算机上安装并配置好 Redis