前置说明-安装环境:
java: 1.8
maven: 3.9.9
开发工具:IntelliJ IDEA 2022.2.3 【以下简称idea】
如果cmd命令行输入以下命令查看到有相应输出则表示环境已安装

第一步:从无到有搭建spring boot2.7.18,并引入spring cloud
方法一:使用 Spring Initializr 初始化项目
Spring Initializr 是一个在线工具,可帮助你快速生成 Spring Boot 项目的基本结构

步骤 1:访问 Spring Initializr 网站
打开浏览器,访问 https://start.spring.io/。
步骤 2:配置项目信息
在该页面上,按照以下要求进行配置:
Project:选择 Maven Project 或 Gradle Project,这里以 Maven Project 为例。
Language:选择 Java。
Spring Boot:输入 版本号。
Group:通常是公司或组织的域名倒序,例如 com.example。
Artifact:项目的唯一标识符,例如 demo。
Name:项目名称,默认与 Artifact 相同。
Description:项目描述,可以简单说明项目的用途。
Package name:默认根据 Group 和 Artifact 生成,例如 com.example.demo。
Packaging:选择 Jar。
Java:选择合适的 Java 版本
由于该网站选不到Spring boot2.7.18版本,我将选择用idea搭建一个空的项目进行配置,当然如果非要使用网站生产也可以,下载后解压文件修改对应的版本号即可使用
方法二:使用idea创建空项目
步骤 1:打开idea:选择左上角File-New-Project

步骤 2:步骤一点完后会出现如图所属弹窗,按弹窗内容选择填写即可完成空项目的搭建

项目结构说明

步骤 3:配置 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>org.cxm</groupId>
<artifactId>spring-cloud-nacos</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
更新Maven依赖

步骤 4:创建主应用类,Main可以删掉

代码如下
package org.cxm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudApplication.class,args);
}
}
步骤 5:创建控制器类
为了方便管理,一般会将每个分支进行文件汇总,如下添加Controller控制层文件夹,所有的控制层文件都放在此文件夹内

新增控制器类TestController,并添加代码如下

package org.cxm.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("get")
public String get() {
return "我的第一个项目!!!";
}
}
步骤 6:运行idea,启动项目

启动后浏览器访问IP:端口【端口默认8080】即可看到控制器类的代码

至此Spring boot2.7.18并引入Spring cloud完成
第二步:集成spring cloud nacos
Nacos 可以作为服务注册与发现中心以及配置中心使用,下面从添加依赖、配置 Nacos、服务注册与发现、配置管理等方面展开说明。
1、启动 Nacos 服务
首先要确保 Nacos 服务已启动,你可以从 Nacos 官方 GitHub 仓库 下载 Nacos 服务端,下载地址:【发布历史 | Nacos 官网 】点击对应版本号即可下载,解压后在命令行中执行以下命令启动:
Linux下进入到bin目录下执行如下命令,lunix如果开了防火墙的话,需开放两个端口8848,9848【9848 端口:在 Nacos 集群模式下,该端口用于 Nacos 节点之间的 gRPC 通信,主要负责数据同步、心跳检测等操作,以此保证集群中各个节点的数据一致性。】
# Linux/Unix/Mac
sh startup.sh -m standalone
Windows下进入bin目录下cmd执行如下命令,或者编辑startup.cmd文件,找到set MODE=,将内容改为set MODE="standalone",保存后,双击点击startup.cmd即可完成nacos服务端启动
# Windows
cmd startup.cmd -m standalone
启动完成后浏览器打开链接即可看到nacos服务端: http://localhost:8848/nacos/index.html

补充:使用源码进行启动-编译-打包(如需对nacos进行定制开发,可以使用源码修改)
2、集成nacos,添加依赖如下
<?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>org.cxm</groupId>
<artifactId>spring-cloud-nacos</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring-cloud相关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba 相关依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring Cloud Nacos Discovery 依赖 用于服务注册与发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Spring Cloud Nacos Config 依赖 用于配置配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- spring-cloud-starter-bootstrap 解析bootstrap.yml文件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
</project>
3、配置 Nacos 地址
如图所示添加如下两个配置文件

application.yml 添加配置如下
server:
port: 8081 # 指定服务端口,如果不指定默认就是8080
spring:
application:
name: springCloudNacos # 指定服务名称,项目启动后注册到nacos的名称就是这个
bootstrap.yml 添加配置如下,用于测试nacos配置自动刷新
spring:
application:
name: springCloudNacos
cloud:
nacos:
#服务注册与发现
discovery:
server-addr: http://127.0.0.1:8848
group: DEFAULT_GROUP #默认分组
# username: #nacos用户名
# password: #nacos密码
#服务配置中心
config:
server-addr: http://127.0.0.1:8848 # Nacos服务端地址
group: DEFAULT_GROUP #默认分组
file-extension: yml #配置文件后缀名
refresh-enabled: true #开启自动刷新配置
# prefix: #配置文件前缀
# username: #nacos用户名
# password: #nacos密码
#下面配置用于测试nacos的配置自动刷新内容获取
common:
username: cxm
age: 18
启动类修改如下
package org.cxm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //nacos服务注册与发现
public class SpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudApplication.class,args);
}
}
修改TestController 文件如下
package org.cxm.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/test")
@RefreshScope //主要用于支持配置的动态刷新
public class TestController {
@Value("${common.username}")
private String username;
@Value("${common.age}")
private Integer age;
@GetMapping("/get")
public String get() {
return "我的第一个项目!!!";
}
@GetMapping("/getMap")
public Map<String, Object> getMap() {
Map<String, Object> map = new HashMap<>();
map.put("username", username);
map.put("age", age);
return map;
}
}
启动服务测试
服务启动后可看到日志打出来的配置信息名称和分组

进入nacos系统可以看到服务已经注册进来了

浏览器访问刚刚控制层写的接口,可以看到bootstrap.yml配置的信息被获取到了

4、配置管理
在配置管理 -> 配置列表中创建一个新的配置
Data ID 为 springCloudNacos.yml(Data ID 默认规则为 {spring.application.name}.{spring.cloud.nacos.config.file-extension}),配置内容如下:

再次刷新刚才接口可看到输出的内容已从nacos配置中获取,如果继续修改nacos配置文件,则获取的信息还会立马更新

至此集成spring cloud nacos已经完成
第三步:集成spring cloud gateway网关服务
集成 Spring Cloud Gateway,实现路由转发等功能。整个集成过程主要包括创建项目、添加依赖、配置路由规则、测试等步骤。
1、按照第一步的方法创建一个空项目为spring-cloud-gateway
2、添加pom依赖如下
<?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>org.cxm</groupId>
<artifactId>spring-cloud-gateway</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring-cloud相关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba 相关依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring Cloud Nacos Discovery 依赖 用于服务注册与发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Spring Cloud Nacos Config 依赖 用于配置配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- spring-cloud-starter-bootstrap 解析bootstrap.yml文件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Spring Cloud Gateway网关,实现路由转发等 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- spring-cloud-starter-loadbalancer 负载均衡组件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
</project>
3、创建启动类,代码如下,删除Main类

package org.cxm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
4、创建yml配置文件

application.yml内容如下
server:
port: 8080
spring:
application:
name: SpringCloudGateway
bootstrap.yml内容如下
spring:
application:
name: SpringCloudGateway
cloud:
nacos:
#服务注册与发现
discovery:
server-addr: http://127.0.0.1:8848
group: DEFAULT_GROUP #默认分组
# username: #nacos用户名
# password: #nacos密码
#服务配置中心
config:
server-addr: http://127.0.0.1:8848 # Nacos服务端地址
group: DEFAULT_GROUP #默认分组
file-extension: yml #配置文件后缀名
refresh-enabled: true #开启自动刷新配置
# prefix: #配置文件前缀
# username: #nacos用户名
# password: #nacos密码
gateway:
discovery:
locator:
enabled: true #开启服务发现路由功能,这样 Spring Cloud Gateway 就能依据服务注册中心(这里是 Nacos)里的服务信息自动创建路由规则
routes:
- id: springCloudNacos #路由的唯一标识,一般用${spring.application.name}
uri: lb://springCloudNacos #目标服务地址,lb://springCloudNacos 里的 lb 代表负载均衡,springCloudNacos 是在 Nacos 注册的服务名,意味着请求会被路由到名为 springCloudNacos 的服务
predicates:
- Path=/test/** #路由断言,也就是路由匹配规则。Path=/test/** 表明当请求路径以 /test/ 开头时,该路由规则就会生效
启动SpringCloudGateway服务,进入nacos服务端可以看到网关服务已被注册上去了

5、创建网关配置

6、测试之前的接口请求
Spring Cloud Nacos的接口请求

Spring Cloud Gateway进行接口转发到Spring Cloud Nacos

至此集成Spring Cloud Gateway完成
补充:给nacos设置用户名密码
1、创建nacos数据库
Nacos 2.x 版本使用数据库来存储用户信息,你需要创建相应的数据库表。以 MySQL 为例,执行 conf/mysql-schema.sql 脚本,该脚本会创建 users、roles、permissions 等表
插入一个用户名:nacos,密码:Nacos@2025!@#$
INSERT INTO users
(username, password, enabled)
VALUES('nacos', '$2a$10$Jsv69Thm1TtuMnVjnAxufu9EW5YNM6NpELOTrfTmQ2PndGZ4RdxWe', 1);
使用如下代码获取 BCrypt 加密后的密码
public static void main(String[] args) {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String rawPassword = "Nacos@2025!@#$";
String encodedPassword = encoder.encode(rawPassword);
System.out.println(encodedPassword);
}
2、配置nacos服务端配置信息
在 conf/application.properties 文件中配置数据库连接信息:
#请根据实际情况修改数据库连接 URL、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://172.16.132.252:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=GH&zgsw@2024
# 开启身份验证
nacos.core.auth.enabled=true
# 指定了服务器身份标识的键。这个键用于标识服务器身份信息的名称
nacos.core.auth.server.identity.key=nacos
# 指定了服务器身份标识的值。客户端在与 Nacos 服务器进行通信时,可以使用这些信息来验证服务器的身份。
nacos.core.auth.server.identity.value=Nacos@2025!@#$
### The default token (Base64 String):原始密钥:nacos_2025250_szhsyb_nacos_token
nacos.core.auth.plugin.nacos.token.secret.key=bmFjb3NfMjAyNTI1MF9zemhzeWJfbmFjb3NfdG9rZW4=
【nacos.core.auth.plugin.nacos.token.secret.key=】 配置说明
在 Nacos 配置中,nacos.core.auth.plugin.nacos.token.secret.key 是用于生成和验证 Nacos 认证令牌(Token)的密钥。当你开启了 Nacos 的身份验证功能(通过设置 nacos.core.auth.enabled=true)后,Nacos 会使用这个密钥对用户登录、服务调用等操作生成的 Token 进行加密和解密,以此来保证认证信息的安全性和完整性
注意事项
1、安全性:这个密钥非常关键,因为它关系到 Token 的加密和解密。在生产环境中,要妥善保管这个密钥,避免泄露。建议使用足够复杂且随机的字符串作为密钥,以增强安全性。
2、长度要求:虽然没有严格固定的长度限制,但为了保证加密的强度,建议使用较长的字符串。一般来说,至少 32 位及以上的随机字符串是比较合适的。
3、Base64 编码:配置时可以直接使用 Base64 编码后的字符串,Nacos 会自动进行解码处理。如果你想修改密钥,生成新的密钥后需要进行 Base64 编码再配置到文件中。
4、以下是使用 Java 代码生成随机字符串并进行 Base64 编码的示例:
public static void main(String[] args) {
String rawKey = "nacos_2025250_szhsyb_nacos_token";
// 进行 Base64 编码
String encodedKey = Base64.getEncoder().encodeToString(rawKey.getBytes(StandardCharsets.UTF_8));
System.out.println("Encoded Key: " + encodedKey);
}
3、 以上配置完成,重启nacos服务即可

用户名:nacos
密码:Nacos@2025!@#$
后续修改密码可以直接在nacos服务上修改
