Nacos配置中心

本文介绍如何使用Spring Cloud Alibaba Nacos作为配置中心,包括配置文件的读取、动态修改及多配置文件管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nacos配置中心

使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。

1.配置中心的基本使用

1.1 创建项目config-client-a

<?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>
    <groupId>com.powernode</groupId>
    <artifactId>naocs-client-config</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>03-naocs-client-config</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.8</spring-boot.version>
        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- 新版中需要添加 bootstrap依赖才会取读bootstrap.yml文件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </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>
            <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>
        </dependencies>
    </dependencyManagement>
    
</project>


1.2在NacosServer里面添加一个配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNlX4Vo9-1672021900634)(images/9.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZcNeHvo9-1672021900635)(images/8.jpg)]

1.3查看数据库mysql

打开数据库nacos我们添加的配置文件就是插入到数据库里面的一条数据

1.4添加配置文件bootstrap.yml

bootstrap.yml 比application有更高的优先级。

server:
    port: 8080
spring:
    application:
        name: config-client-a
    cloud:
        nacos:
            config:  #指定配置中心的地址和配置中心使用的数据格式
                server-addr: localhost:8848
                file-extension: properties

1.5读取配置文件的内容

在项目中添加一个实体类Hero,映射配置文件属性

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component  // 添加到IOC中,一会在controller注入
@RefreshScope  // 刷新的域,当远程配置文件修改后可以动态刷新
public class Hero {

    @Value("${hero.name}")
    private String name;
    @Value("${hero.age}")
    private Integer age;
    @Value("${hero.address}")
    private String address;

}

添加控制器,读取对象hero的属性

@RestController
public class HeroController {
     @Autowired
    private Hero hero;
   
    @GetMapping("heroInfo")
    public String heroInfo() {
        return hero.getName() + ":" + hero.getAge() + ":" + hero.getAddress();
    }
}

1.6测试配置文件动态修改

(1)测试发现,确实能读取到远程配置文件的内容

(2)修改远程配置文件的内容,无需重启,刷新浏览器,读取到修改之后的配置内容,

(3) 动态刷新,依赖于@RefreshScope 注解

注意:远程 config配置文件可以查看历史版本,可以回滚,功能比较强大。

2.配置文件的读取方式

nacos配置中心通过namespace、dataId和group来唯一确定一条配置。

Namespace:即命名空间。默认的命名空间为public,我们可以在Nacos控制台中新建命名空间;
dataId:即配置文件名称
group:即配置分组,默认为DEFAULT_GROUP,可以通过spring.cloud.nacos.config.group配置。

其中:dataId 是最关键的配置字段:格式如下:
  ${prefix} - {spring.profiles.active}  . {file-extension}  

说明:
prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置;
 spring.profiles.active即为当前环境对应的profile。注意,当spring.profiles.active为空时,对应的连接符-也将不存在,dataId的拼接格式变成{prefix}.{file-extension};
 
 file-extension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。

这就是上面我们为什么能获得到配置的原因了。

3.配置文件划分

Nacos配置中心的namespace、dataId和group可以方便灵活地划分配置。比如,我们现在有一个项目需要开发,项目名称为powernode,项目开发人员分为两个组:GROUP_A和GROUP_B,项目分为三个环境:开发环境dev、测试环境test和生产环境prod

powernode->GRUOR_A->dev

3.1添加命名空间

在nacos配置中心新建一个powernode的命名空间,生成了一个id,要记住这个id:5510ef39-ca9a-4f5d-87ba-7fb2afbf7035。

添加配置config-client-dev.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9t8nqW16-1672021900636)(images/10.jpg)]

3.2修改配置文件bootstrap.yml

server:
    port: 8080
spring:
    application:
        name: config-client-a
    cloud:
        nacos:
            config:
               server-addr: localhost:8848
               namespace: 5510ef39-ca9a-4f5d-87ba-7fb2afbf7035  # 命名空间 注意使用 id
               group: GROUP_A    # 组别
                prefix: config-client   # 配置文件前缀,如果不写 默认使用${spring.application.name}的值
                file-extension: yml  # 后缀 文件格式
    profiles:
        active: dev  # spring的环境配置


3.3重启测试

读取到新的配置信息。

4.获取多配置文件

除了通过上面的方式指定一个唯一配置外,我们还可以同时获取多个配置文件的内容。

提供这个功能 可以再次封装和抽象配置文件管理

4.1 在Nacos中新建两个配置文件

在powernode命名空间,继续点击添加两个配置文件

(一)添加配置文件config-a.yml

组名:GROUP_A

hero:
	name: AAA
	age: 20

(二)添加配置文件config-b.yml

组名: GROUP_B

hero:
	address: 广州高塘石

(三)修改bootstrap.yml

server:
    port: 8080
spring:
    application:
        name: config-client-a
    cloud:
        nacos:
            config:
                server-addr: localhost:8848
                namespace: 5510ef39-ca9a-4f5d-87ba-7fb2afbf7035  # 命名空间 注意使用 id
                extension-configs:  # 配置多个配置文件 数组形式
                    -   data-id: config-a.yml  # 配置id,必须要加文件后缀
                        group: GROUP_A  # 组别
                        refresh: true  # 是否支持刷新
                    -   data-id: config-b.yml
                        group: GROUP_B
                        refresh: false


说明:

spring.cloud.nacos.config.extension-configs[n].dataId,指定多个配置的dataId,必须包含文件格式,支持properties、yaml或yml;

spring.cloud.nacos.config.extension-configs[n].group,指定分组;

spring.cloud.nacos.config.extension-configs[n].refresh,是否支持刷新。

上面的配置中,我们分别从DEFAULT_GROUP中获取了config-a.yml和config-b.yml配置内容,并且config-a.yml支持刷新,config-b.yml不支持刷新。

注意:
 没有namespace的配置,言外之意就是Nacos目前还不支持多个配置指定不同的命名空间,只能在同一个命名空间使用。

5.共享配置

日常开发中,多个模块可能会有很多共用的配置,比如数据库连接信息,Redis 连接信息,RabbitMQ 连接信息,监控配置等等。那么此时,我们就希望可以加载多个配置,多个项目共享同一个配置之类等功能,Nacos Config支持。但是共享配置优先级低,所以如果是共享配置只需要写在shared-configs中指定的配置,相同的配置节如果在具体的配置文件中有了,则共享配置不生效.

server:
    port: 8081
spring:
    application:
        name: nacos-config-client
    cloud:
        nacos:
            server-addr: 127.0.0.1:8848
            username: nacos
            password: nacos
            config:
                namespace: f017d27f-ae36-47bd-8da4-213f5cce1d1a  # 命名空间
                file-extension: yml
                group: A_GROUP
                prefix: nacos-config-client
                shared-configs:  # 共享配置文件 ---优先级低
                       - data-id: application-dev.yml
                         group: GROUP_A

    profiles:
        active: dev


6.配置内容规划

6.1本地的bootstrap.yml

应用名称,配置文件中心,注册中心地址,读取的配置文件名称信息等

6.2远端的配置文件

应用端口,数据源配置,redis配置,MQ配置,mybatis,Swagger的配置,这些配置可能会随着项目部署发生变化,在远端存储在git上便于动态刷新

7.nacos集群

为了提高可用性,将注册中心/配置中心配置为集群,提高系统可用性

配置三个nacos,分别将端口改为8847,8848,8849,并将运行模式由standalone改为cluster,添加cluster.conf配置,分别添加三台服务器地址

#修改start.cmd文件中的启动模式
set MODE="cluster"    
#修改cluster.conf中的集群配置
192.168.179.1:8847  192.168.179.1:8848  192.168.179.1:8849   

#应用中,服务器地址改为
server-addr: localhost:8848, localhost:8847, localhost:8849

服务器配置自动同步,任何一台宕机都不影响应用的正常使用

将端口改为8847,8848,8849,并将运行模式由standalone改为cluster,添加cluster.conf配置,分别添加三台服务器地址

#修改start.cmd文件中的启动模式
set MODE="cluster"    
#修改cluster.conf中的集群配置
192.168.179.1:8847  192.168.179.1:8848  192.168.179.1:8849   

#应用中,服务器地址改为
server-addr: localhost:8848, localhost:8847, localhost:8849

服务器配置自动同步,任何一台宕机都不影响应用的正常使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangshaohui00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值