1 .安装JDK17
不做介绍,需要验证jdk环境

2. 安装nacos
nacos官网下载地址:https://nacos.io/download/nacos-server/?spm=5238cd80.4fecfdc.0.0.5bf0e755B1ftSq
本次教程以nacos2.2.1版本为准。
nacos启动不起来请查看官网文档说明:https://nacos.io/docs/v3.0/overview/?spm=5238cd80.4fecfdc.0.0.5bf0e755B1ftSq
spring cloud 和 nacos的版本对应关系

3. 开始搭建spring cloud项目
3.1 新建父级工程

修改父项目的pom
文件中的groupId和artifactId记得改成自己需要的
<?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>com.xxx</groupId>
<artifactId>xxx</artifactId>
<!-- 首先修改打包方式 -->
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!--引入其他的服务 -->
<modules>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 因为是总项目 所以用dependencyManagement来管理 因为其他的子项目就不会来管理版本了了 可以直接引用 -->
<dependencyManagement>
<dependencies>
<!-- springcloud的依赖
Spring Cloud 与Spring Boot版本对应关系:https://baijiahao.baidu.com/s?id=1771358714767361684&wfr=spider&for=pc -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-cloud-alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springboot的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
删除父项目的src文件

3.2 创建子项目

输入完上述信息后,直接next

spring boot 版本要选择3.x,不然创建出来子项目的pom文件中显示的JDK的版本为1.8
spring web 需要选择一下,不然创建出来的子项目没有resources这个文件夹,没有的可以自己创建一下,并标记
修改子项目security的配置文件
没有parent标签的添加一下,groupId和artifactId记得改成自己需要的
<?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>
<parent>
<groupId>com.xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xxx</groupId>
<artifactId>xxx-Security</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>xxx-Security</name>
<description>xxx-Security</description>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.0.2</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.junbo.security.JunboSecurityApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
检查一下父项目中的modules标签中是不是有子项目,没有自己加一个,尽量复制粘贴,别写错了,包括大小写

然后理由maven刷新一下,检查是否报错
或者

可以根据自己的习惯修改一下application.properties的名字改成yml格式
配置文件中默认端口:8080,可以自行修改
最后可以先写一个接口,启动一下项目,访问一下,验证一下项目是否可以正常运行;
3.3 配置nacos注册中心
子项目中添加nacos的jar
<!-- 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>
application.yml中增加nacos配置,xxx为自定义名字
import 和 nacos中data id 名字是一样的,如果不一样,配置文件获取不到
spring:
application:
name: xxx
config:
import: nacos:xxx-dev.yml
cloud:
nacos:
discovery:
# Nacos注册中心地址(确保Nacos已启动,地址正确)
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yml
nacos中创建配置文件


nacos的配置刷新功能

加上上述两个配置,就可以在nacos中实时修改配置,程序中就可以实时刷新了。
3.4 搭建gateway


修改gateway的pom文件 以下配置文件中的xxx更换成自己的名字
<?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>
<parent>
<groupId>com.xxx</groupId>
<artifactId>xxxCloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.xxx</groupId>
<artifactId>xxx-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>xxx-gateway</name>
<description>xxx-gateway</description>
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>3.0.0</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</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>
<!-- gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.junbo.gateway.JunboGatewayApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
修改gateway的application文件,xxxx改为项目的名字
spring:
application:
name: xxxx-Gateway
config:
import: nacos:xxxx-Gateway-dev.yml
cloud:
nacos:
discovery:
# Nacos注册中心地址(确保Nacos已启动,地址正确)
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yml
nacos中增加xxxx-Gateway-dev.yml文件

id xxx为项目的名字或者nacos上 服务列表 的服务名
lb xxx为访问路径上的名字
server:
port: 8887
spring:
cloud:
gateway:
default-filters:
- AddRequestHeader=origin,gateway # 添加名为origin的请求头,值为gateway
globalcors:
cors-configurations:
'[/**]': # 匹配所有请求
allowedOrigins: "*" #跨域处理 允许所有的域
allowedMethods: # 支持的方法
- GET
- POST
- PUT
- DELETE
discovery:
locator:
enabled: true #开启注册中心路由功能
routes: # 路由
- id: xxx-Security #路由ID,没有固定要求,但是要保证唯一,建议配合服务名
uri: lb://xxx-Security # 匹配提供服务的路由地址
predicates: # 断言
- Path=/security/** # 断言,路径相匹配进行路由
- id: xxx-User #路由ID,没有固定要求,但是要保证唯一,建议配合服务名
uri: lb://xxx-User # 匹配提供服务的路由地址
predicates: # 断言
- Path=/user/** # 断言,路径相匹配进行路由
config:
redisTimeout: 60
配置完以上配置可以直接启动测试以下,以上配置为亲测,注意xxx的修改