从0搭建 Spring Cloud Alibaba 基础工程框架搭建
整个项目结构:
技术栈:spring cloud alibaba、MySQL8、Mybatis-Plus、Nacos、knife4j 接口文档、Lombok
一. 开发环境安装
- JDK17安装
- MySQL安装
二. 工程搭建
2.1 构建父子工程
2.1.1 创建父工程
- 创建⼀个空的 Maven 项目, 删除所有代码, 只保留 pom.xml
- 目录结构: 图二
- 完善父工程 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
- dependencies :将所依赖的 jar 直接加到项目中. 子项目也会继承该依赖.
- dependencyManagement :只是声明依赖, 并不实现Jar包引入. 如果子项目需要用到相关依赖,需要显式声明. 如果子项目没有指定具体版本, 会从父项目中读取 version. 如果子项目中指定了版本号,就会使用子项目中指定的 jar 版本. 此外父工程的打包方式应该是 pom,不是 jar, 这里需要手动使用 packaging 来声明.
注: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