首页 > 其他分享 >从0搭建 Spring Cloud Alibaba 基础工程框架搭建

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

时间:2024-11-01 13:57:51浏览次数:1  
标签:spring nacos module alibaba Spring Alibaba com cloud 搭建

整个项目结构:

技术栈: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

标签:spring,nacos,module,alibaba,Spring,Alibaba,com,cloud,搭建
From: https://www.cnblogs.com/xd99/p/18518545

相关文章

  • SpringBoot抗疫物资管理:技术与策略
    第五章系统功能实现5.1管理员登录管理员登录,通过填写用户名、密码、角色等信息,输入完成后选择登录即可进入抗疫物资管理系统,如图5-1所示。5.2管理员功能实现图5-1管理员登录界面图5.2.1用户管理管理员对用户管理获取用户名、用户姓名、头像、性别、年龄、手机号码......
  • 抗疫物资管理:SpringBoot技术革新
    第六章系统测试软件测试它是对做完一个系统进行最后的一项工作,因为我们在做系统的时候,在进行编码以后可以开始对软件进行测试,在测试当中我们可以找出这个软件的错误与缺陷,这样我们可以及时处理,不影响后期正常的使用,同时也方便我们在后期使用过程中出现的问题容易去找出。......
  • 基于SpringBoot的在线考试系统
    引言  在信息化教育的浪潮中,在线考试系统成为了提高考试效率和优化资源配置的重要工具。传统的纸质考试流程不仅需要大量人力物力,还存在着批阅时间长、成绩分析困难等问题,难以满足快速发展的教育需求。本文介绍了一个基于SpringBoot+Vue+MySQL+MyBatis实现的在线......
  • 【SpringBoot】Jedis和Lettuce的区别
    Springboot整合Lettucespringboot2.0版本后,spring-boot-starter-data-redis提供了Lettuce代替Jedis。<!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId......
  • (附源码)基于Spring Boot的英语学习网站的设计与实现-计算机毕设 28248
    基于SpringBoot的英语学习网站的设计与实现摘要在当今全球化的时代,英语已经成为了国际交流的通用语言。为了提高英语水平,越来越多的人选择在线学习英语。然而,传统的英语学习网站往往存在功能单一、交互性差、用户体验不佳等问题。为了解决这些问题,我们提出了基于SpringB......
  • 性能测试|linux服务器搭建JMeter+Grafana+Influxdb监控可视化平台
    前言在当前激烈的市场竞争中,创新和效率成为企业发展的核心要素之一。在这种背景下,如何保证产品和服务的稳定性、可靠性以及高效性就显得尤为重要。而在软件开发过程中,性能测试是一项不可或缺的环节,它可以有效的评估一个系统、应用或者软件的性能指标。然而,如何提升性能测试效......
  • SpringMVC笔记 一万字
    此笔记来自于B站尚硅谷文章目录一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖3、配置web.xmla>默认配置方式b>扩展配置方式4、创建请求控制器5、创建sprin......
  • SpringBoot抗疫物资调配系统开发
    第1章概述1.1研究背景随着现代网络技术发展,对于抗疫物资管理系统现在正处于网络发展的阶段,所以对它的要求也是比较严格的,要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式,依靠网络技术的的快速发展和现代通讯技术的结合为用户带来方便,可以方便管理员网......
  • 基于SpringBoot的抗疫物资智能管理平台
    第1章概述1.1研究背景随着现代网络技术发展,对于抗疫物资管理系统现在正处于网络发展的阶段,所以对它的要求也是比较严格的,要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式,依靠网络技术的的快速发展和现代通讯技术的结合为用户带来方便,可以方便管理员网......
  • SpringBoot项目集成MinIO
    一、MinIO的下载安装以及基本使用1.下载地址:https://dl.min.io/server/minio/release/windows-amd64/minio.exe2.下载好后需要手动创建data文件夹用于存储MinIO中的数据 3.键入cmd 4.设置MinIO的一些变量(第一次启动需要配置)setMINIO_ROOT_USER=adminsetMINIO_ROOT_P......