在上一篇 【Spring实战】32 Spring Boot3 集成 Nacos 服务注册中心 文章中,我们介绍了 Nacos 的定义、背景、功能和特性,并通过简单示例演示了如何在 Gateway 网关中应用。但是在微服务架构中,配置中心也是一个非常重要的组件,它可以帮助我们集中管理应用的配置信息。Nacos 作为一个优秀的配置中心工具,为微服务提供了灵活且可靠的配置管理。本文将介绍如何在 Spring Boot 项目中集成 Nacos 配置中心,实现统一的配置管理。
在 Spring 框架中,配置中心是指一种集中式管理应用程序配置信息的机制。它的目标是通过集中存储和管理配置,实现配置的动态更新、版本管理和统一管理,以提高系统的灵活性、可维护性和可扩展性。
配置中心通常用于解决以下问题:
集中管理配置:
将应用程序的配置集中存储在一个地方,便于管理和维护,避免配置散落在各个应用实例中
动态更新配置:
允许在运行时动态修改配置,无需重启应用,从而提高系统的可用性和灵活性
版本管理:
提供配置的版本管理,方便进行配置的回滚、比较和历史查看
统一配置管理:
统一管理所有微服务的配置,确保它们之间的配置一致性,简化系统的部署和维护
Spring Cloud Config:
Spring Cloud提供了一个名为Spring Cloud Config的子项目,用于构建分布式系统中的配置服务和客户端。它支持配置文件存储在Git、SVN等版本控制系统中,也可以通过HTTP、JDBC等方式获取配置
Nacos:
Nacos是一个综合性的服务发现和配置管理平台,它可以作为配置中心,支持动态配置管理、服务发现、服务健康监测等功能。Nacos提供了丰富的功能,适用于构建和管理云原生应用
Zookeeper:
Zookeeper是一个分布式的协调服务,也可以用作配置中心。它提供了一个简单的键值存储系统,用于存储和管理配置信息
Consul:
Consul是一个分布式的服务发现和配置管理工具。它支持健康检查、服务注册和发现,同时也可以用作配置中心
下面通过一个简单的示例演示 Spring Boot 项目如何使用 Nacos 配置管理中心。
定义一个配置文件,配置一个我们用于测试的名字,key 是 koala.user.name
value 是 cheney
application.yml
server:
port: 9501
servlet:
context-path: /account
koala:
user:
name: cheney
写一个 REST 请求,并且使用 Spring 提供的 @Value("${koala.user.name}")
来从配置文件中获取名字
HelloController.java
package com.cheney.koala.account.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${koala.user.name}")
private String userName;
@GetMapping("hello")
public String hello() {
return String.format("Hello %s", userName);
}
}
创建一个普通的 Spring boot 启动类
KoalaAccountApplication.java
package com.cheney.koala.account;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class KoalaAccountApplication {
public static void main(String[] args) {
SpringApplication.run(KoalaAccountApplication.class, args);
}
}
启动服务&验证
访问下面的 URL,然后就可以读取到了我们提前在 application.yml
中配置的名字
http://localhost:9501/account/hello
⚡ 这个时候存在一个问题,如果我们需要修改名字的话,那么就需要去修改代码并且重启服务才可以
那么如何解决呢?引入 Nacos 配置中心!
继续在上面的 Spring Boot 项目中引入 Nacos 配置中心的依赖。在pom.xml
文件中添加如下依赖:
引入了如下配置中心的依赖 spring-cloud-starter-alibaba-nacos-config
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2022.0.0.0-RC1version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
在 bootstrap.yml
中配置 Nacos 服务器的连接信息
bootstrap.yml
spring:
application:
name: account
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
其中 127.0.0.1:8848
是实际的 Nacos 服务器地址,account
是 Nacos 命名空间
首先启动 Nacos 服务并登录管理页面
http://localhost:8848/nacos
点击 配置列表 - 创建配置
分别输入 Data ID,描述信息,此处我选择了 YAML 其他配置格式也是可以的,然后就是配置内容了
信息填写完成后,点击 发布
这样一条配置信息就创建好了。可以点击后面的一系列操作按钮进行增删改查操作
继续使用上面的 Spring Boot 项目代码,增加一个连接 Nacos 的配置
bootstrap.yml
spring:
application:
name: account
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
这里配置了 Nacos 的地址 127.0.0.1:8848
,已经我们使用的配置文件格式 yaml
再次访问下面的 URL,然后就可以读取到了我们提前在 Nacos 配置中心中配置的名字
http://localhost:9501/account/hello
我们在 Nacos 配置中心中修改 koala.user.name
对应名字的值,保存配置。
点击发布之后,可以看到修改哪里了。然后确认发布,确定,即可。
然后再次访问下面的 URL,
http://localhost:9501/account/hello
你会发现,为什么没有显示我们新修改的值呢???它不是实时刷新么。。。。
原因是,如果我们想要实时刷新,则需要在 HelloController 上新加一个 @RefreshScope
然后我们重启服务,访问 URL
http://localhost:9501/account/hello
再去将配置中心中 koala.user.name
对应名字的值修改为 cheney
,保存配置。
再次访问 URL
http://localhost:9501/account/hello
发现可以动态刷新成 Nacos 配置中心中的最新值啦
https://gitee.com/cheney09/koala-system
本文我们成功的将 Spring Boot 项目集成了 Nacos 配置中心,实现了动态配置管理。Nacos的优秀特性使得配置的管理变得更加灵活和便捷,适用于各种规模的微服务项目。希望这篇文章能够帮助你顺利地将 Nacos 配置中心引入到你的 Spring Boot 项目中。