从0搭建 Spring Cloud Alibaba 基础工程框架搭建

整个项目结构:

技术栈:spring cloud alibaba、MySQL8、Mybatis-Plus、Nacos、knife4j 接口文档、Lombok

一. 开发环境安装

  • JDK17安装
  • MySQL安装

二. 工程搭建

2.1 构建父子工程

2.1.1 创建父工程

  1. 创建⼀个空的 Maven 项目, 删除所有代码, 只保留 pom.xml
  2. 目录结构: 图二

  

  1. 完善父工程 pom 文件
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>

    <!-- 项目基本信息 -->
    <groupId>spring-cloud-alibaba</groupId>
    <artifactId>spring-cloud-alibaba</artifactId>
    <packaging>pom</packaging>
    <name>Spring Cloud Alibaba Parent</name>
    <modules>
        <module>common-module</module>
        <module>gateway-module</module>
        <module>logback-module</module>
        <module>feign-clients-module</module>
        <module>mq-module</module>
        <module>service-api</module>
    </modules>
    <version>1.0</version>
    <!-- 继承 Spring Boot 的父 POM -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!--版本控制-->
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mybatis-plus.version>3.5.3</mybatis-plus.version>
        <mysql.version>8.2.0</mysql.version>
        <lombok.version>1.18.32</lombok.version>
        <knife4j.version>4.4.0</knife4j.version>
        <spring-cloud.version>2022.0.0</spring-cloud.version>
        <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
    </properties>

    <!-- 依赖管理 -->
    <!--使用dependencyManagement标签,不会实际引入jar,子项目继承时必须显式声明-->
    <dependencyManagement>
        <dependencies>
            <!-- 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>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Nacos 依赖版本-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
            </dependency>
            <!-- MySQL 依赖 -->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql.version}</version>
                <scope>runtime</scope>
            </dependency>
            <!-- MyBatis Plus 依赖 -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
                <scope>compile</scope>
            </dependency>
            <!-- knife4j 接口文档 -->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
                <version>${knife4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--使用dependencies标签,lombok 会被直接引入到当前项目以及子项目中-->
    <dependencies>
        <!-- Lombok 依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>compileOnly</scope>
        </dependency>
    </dependencies>

    <!-- 插件管理 -->
    <build>
        <pluginManagement>
            <plugins>
                <!-- 编译插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.10.1</version>
                    <configuration>
                        <source>${maven.compiler.source}</source>
                        <target>${maven.compiler.target}</target>
                    </configuration>
                </plugin>
                <!-- Spring Boot Maven 插件 -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->
    <repositories>
        <repository>
            <id>aliyunmaven</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
        <repository>
            <id>huaweicloud</id>
            <name>huawei</name>
            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
        </repository>
        <repository>
            <id>central</id>
            <name>Maven Central</name>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>



</project>

DependencyManagement 和 Dependencies

  1. dependencies :将所依赖的 jar 直接加到项目中. 子项目也会继承该依赖.
  2. dependencyManagement :只是声明依赖, 并不实现Jar包引入. 如果子项目需要用到相关依赖,需要显式声明. 如果子项目没有指定具体版本, 会从父项目中读取 version. 如果子项目中指定了版本号,就会使用子项目中指定的 jar 版本. 此外父工程的打包方式应该是 pom,不是 jar, 这里需要手动使用 packaging 来声明.

Spring Cloud Alibaba版本对照  

 注:Nacos版本遇到的问题:Nacos版本需引用 ${spring-cloud-alibaba.version} 不然会报错找不到nacos配置(直接引用官方版本对照的 2.2.1.RELEASE 不行,会报错)。

2.1.2 创建子项目-公共模块,用来存放共用module

  

其余模块创建方式类似

其中service-api模块下的子模块创建方式如下

service-api模块的pom.xml文件

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>spring-cloud-alibaba</groupId>
        <artifactId>spring-cloud-alibaba</artifactId>
        <version>1.0</version>
    </parent>

    <groupId>service-api</groupId>
    <artifactId>service-api</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>app-api-module</module>
        <module>miniapp-api-module</module>
        <module>system-api-module</module>
        <module>auth-module</module>
    </modules>

    <dependencies>
        <!--引入公共模块(common、feign、mp)依赖-->
        <dependency>
            <groupId>common-module</groupId>
            <artifactId>common-module</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>mq-module</groupId>
            <artifactId>mq-module</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>feign-clients-module</groupId>
            <artifactId>feign-clients-module</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Nacos 依赖版本-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- MySQL 依赖 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>
        <!-- MyBatis Plus 依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <!-- knife4j 接口文档 -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!-- 父 POM 中已管理的插件,无需重复声明 -->
        </plugins>
    </build>

</project>

2.1.3 编写application.yml  (连接nacos版)

application.yml
 spring:
  application:
    name: app-api-module(模块名,每个项目的都不一样,且需要对照nacos的配置)
  cloud:
    nacos:
      server-addr: Nacos的IP地址:8848   #注册中心地址
      username: nacos账号(如果有的话)
      password: nacos密码(如果有的话)
      config:
        server-addr: Nacos的IP地址:8848   #注册中心地址
        username: nacos账号(如果有的话)
        password: nacos密码(如果有的话)
        file-extension: yml
        group: call(命名空间)
        namespace: 21e6f6a7-3293-4db2-9fdc-e671111ec121 (命名空间ID)
      discovery:
        group: call(命名空间)
        namespace: 21e6f6a7-3293-4db2-9fdc-e671111ec121(命名空间ID)
  config:
    import:
      - optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}

Nacos基础配置

1、新建命名空间(也可用默认命名空间)

2、修改上面application.yml中的命名空间组名和命名空间ID

3、在新的命名空间下创建配置

4、注意Data ID与Group的名字与 application.yml 中的配置相对应,然后将下方的配置复制进去,修改为自己的数据库IP地址、账号、密码

Nacos.yml
 server:
  port: 8081
  servlet:
    context-path: /api
spring:
  #  数据库配置
  datasource:
    url: jdbc:mysql://MySQL数据库IP地址:3306/test
    username: root(MySQL账号)
    password: root(MySQL密码)
    driver-class-name: com.mysql.cj.jdbc.Driver
  data:
    redis:
      database: 1
      host: Redis数据库IP地址
      port: 6379
      password: root(Redis密码)
      lettuce:
        pool:
          enabled: true
          max-active: 100
          max-wait: 10000
          min-idle: 0
  # 配置文件上传时的相关设置
  servlet:
    multipart:
      enabled: true     # 启用Spring Boot的(multipart)文件上传支持。Spring Boot会自动配置处理文件上传所需的所有基础设施,如:解析器、存储策略和过滤器等。
      max-file-size: 50MB   # 限制单个文件的最大大小。如果上传的文件超过此大小,将抛出异常。
      max-request-size: 50MB    # 限制整个Http请求(包括所有文件和表单字段)的最大大小。如果上传的请求超过此大小,将抛出异常。
############## Sa-Token 配置##############
#sa-token:
  # token 名称(同时也是 cookie 名称)
#  token-name: Bearer
  # token 有效期(单位:秒) 默认30天,-1 代表永久有效
#  timeout: 2592000
  # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
#  active-timeout: 900
  # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
#  is-concurrent: false
  # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
#  is-share: true
  # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
#  token-style: random-32
  # 是否输出操作日志
#  is-log: true
  # 是否开启token自动续签
#  auto-renew: true
# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true
#  设置mybatisplus打印执行语句
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.1.4 编写启动类

Application.java
package com.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AppApiModuleApplication {

    public static void main(String[] args) {
        SpringApplication.run(AppApiModuleApplication.class, args);
        System.out.println("Knife4j访问地址:http://localhost:8081/api/doc.html");
    }

}

到此,Nacos、MySQL、Redis连接正常,启动类正常运行,如下所示

点击 http://localhost:8081/api/doc.html 会出现以下页面说明一切正常,可以开始编写代码了

 

参考链接:https://blog.csdn.net/m0_67660672/article/details/141195272

posted @ 2024-11-01 14:04  xd99  阅读(17)  评论(0编辑  收藏  举报