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

news/2025/1/13 8:07:57/文章来源:https://www.cnblogs.com/xd99/p/18518545

整个项目结构:

技术栈: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></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: ymlgroup: 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: 8081servlet:context-path: /api
spring:#  数据库配置datasource:url: jdbc:mysql://MySQL数据库IP地址:3306/testusername: root(MySQL账号)password: root(MySQL密码)driver-class-name: com.mysql.cj.jdbc.Driverdata:redis:database: 1host: Redis数据库IP地址port: 6379password: root(Redis密码)lettuce:pool:enabled: truemax-active: 100max-wait: 10000min-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目经理在哪些方面需要与组织的其他部门合作

项目经理需要与组织的其他部门在以下方面紧密合作:资源分配、沟通协调、风险管理、知识共享。在这些方面,特别需要强调沟通协调。有效的沟通能够确保项目团队与组织内其他部门之间的信息流动畅通无阻,帮助识别和解决跨部门的问题,同时促进项目与组织战略目标的一致性。 一、…

实现文件目录结构功能

实现文件目录结构功能@目录说明:该文章用于目录结构递进显示NodeConstructTree 说明:该文章用于目录结构递进显示Node package com.geespace.microservices.directory.assets.entity;import java.util.ArrayList; import java.util.List;import lombok.Data;/*** @Author: wj…

juicefs元数据存储方式

环境 文件系统使用juicefs,元数据存储使用postgresql,数据存储使用minio 问题? 通过juicefs写入一个文件,元数据在postgresql中是如何存储的?数据在minio中又是如何存储的? 使用docker部署完测试环境后,新建 file1、dir1/file1、dir1/file2三个文件 在postgresql中 jfs_…

有什么好的开源自动化测试框架可以推荐

根据“有什么好的开源自动化测试框架可以推荐”这个标题,1、Selenium,2、Appium,3、Robot Framework,4、JUnit。 对Selenium进行展开详细描述,在开源自动化测试工具领域,Selenium以其强大的功能和广泛的应用背景成为了多数开发者及测试人员的首选。Selenium不仅支持多种浏…

如何确定项目计划的关键绩效指标(KPI)

确定项目计划的关键绩效指标(KPI)应该以项目目标、过程优化与最终结果的可衡量性为依据。首先,明确项目目标是确定KPI的基础。根据目标,选择能够量化项目进程和成果的指标、保证KPI具有实时性和可操作性是确保效果的关键、并且需要确保KPI与组织的整体战略目标一致。例如,…

c#表达式树入门,看这个就够了

题记: 由于反射需要大量的性能开销,所以推荐用表达式树或者emit,但是emit 如果不熟悉指令编程的话,使用成本很大,所以优先推荐表达式树,但是网上给出来的文档 都非常的复杂,只是带你使用,刚好我团队的小伙伴也不太理解,所以我来整理一篇简单入门版本的.问: 反射有3种方式,一个是…

黑马PM-电商项目-电商后台

电商后台的核心作用及架构电商后台基础支撑

MEAS-Measurement: Sensors

Measurement: Sensors是一本开放获取期刊,对来自这个高度热门和多学科学科学科的所有相关领域的原创、高质量贡献开放。邀请提交关于科学、工程和技术的理论、研究、开发、制造和应用的各个方面的投稿,这些领域包括当今传感器和传感器系统。我们鼓励作者提交有关该领域的新材…

TI-Trends in Immunotherapy

Trends in Immunotherapy 是一本开放获取的同行评审期刊,涵盖与所有基于免疫系统的领域相关的各个学科。TI 的目标受众包括来自学术界、医疗行业、教育界等的科研人员、专业从业人员和医学学者。它提供了一个论坛来分享学术著作,以科学与医学相结合的方式推进免疫疗法。 发表…

为什么 C++ 编译速度比 Java 慢得多

### 为什么 C++ 编译速度比 Java 慢得多 在探讨为什么 C++ 编译速度比 Java 慢得多时,我们可以归纳出几个核心原因:C++的编译模型更为复杂、模板元编程、宏处理以及链接时间。其中,C++的编译模型更为复杂这一点尤为突出。C++需要处理的细节更多,如模板实例化、头文件的重复…

赠送天翼云电脑,解决一点园子的商业化烦恼

救园成功后,我们一边开启AI之旅,一边尝试做一些当前力所能及的商业化项目,增加园子的收入来源。 这个月开始尝试做一些天翼云电脑的代理业务,先给大家赠送一些天翼云电脑体验一下。 赠送方案:终身PLUS会员赠送1年4核8G云电脑(限1个名额) 终身会员赠送3个月4核8G云电脑(…

VR游戏和传统游戏在体验上有多大差异_1

​​虚拟现实(VR)游戏和传统视频游戏在玩家体验上呈现显著差异,这些差异主要体现在以下等方面:1.沉浸感和现实感;2.交互方式和控制;3.硬件需求和可访问性;4.游戏设计和内容;5.社交互动;6.身体参与和舒适度。VR游戏通过创新的技术提供了更为沉浸式的游戏体验,而传统游…