Nacos 配置文件总结

news2025/7/23 22:11:11

Nacos 配置文件总结

文章目录

  • Nacos 配置文件总结
  • 1 、在 Nacos 服务端添加配置文件
      • 1. 启动`Nacos Server`。
      • 2. 新建配置文件。
      • 3. 发布配置集后,我们便可以在配置列表中查看相应的配置文件。
      • 4. 配置nacos数据库
      • 5. 运行 Nacos 容器
      • 6. 验证安装结果
      • 7. 配置验证
  • 2 、在 Nacos 客户端配置服务端配置文件
      • 1. 文件介绍、`bootstrap.yaml`和`application.yaml`
        • a、加载顺序区别:
        • b、优先级区别:
        • c、应用场景区别:
      • 2. 方式一:在application.yaml(或properties )文件中配置【不推荐】
        • (1)添加依赖
        • (2)配置
      • 3. 方式二:在bootstrap.yaml(或properties )文件中配置【推荐】
        • (1)添加依赖
        • (2)配置
          • a、在`application.yaml`配置文件中配置普通配置。
          • 加载默认的配置文件顺序
          • b、在`bootstrap.yaml`配置文件中配置`Nacos Config `相关的。
        • (3)加载任意的配置文件
          • a、创建自定义配置文件
  • 3 、在 Nacos 客户端使用配置文件
      • 1. 方式一:通过`ConfigurableApplicationContext`类获取配置信息
      • 2. 方式二:通过@Value注解获取配置信息
      • 3. 方式三:通过@ConfigurationProperties注解配置类获取配置信息
        • (1)引入`Lombok`相关的依赖。
        • (2)新建一个配置类。
        • (3)使用配置信息。
        • (4)测试
    • 4、nacos配置公共与专属配置
      • 1. 配置优先级(重要区别)
      • 2. 设计用途对比:
      • 3. 实际应用场景示例:
      • 4. 配置覆盖规则:
      • 5. 最佳实践建议:

1 、在 Nacos 服务端添加配置文件

1. 启动Nacos Server

2. 新建配置文件。

  • 登录Nacos后台后,在配置列表中新增一个配置文件。

    在这里插入图片描述

  • 在配置页面填写配置信息。

redis.yaml文件:

user:
  name: jsboss  #与系统变量名称冲突
  userName: atangbiji
  age: 5
  sex:

在这里插入图片描述

:当在bootstrap.yaml(或properties )文件中进行配置时,Nacos会默认加载Data ID 命名为:${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-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。目前只支持properties(默认)和yaml类型。

3. 发布配置集后,我们便可以在配置列表中查看相应的配置文件。

在这里插入图片描述

新建完配置文件(配置集)后,我们就可以在微服务中使用该配置文件了。

:新建的配置文件信息被保存在Nacos数据库的config_info表中。

4. 配置nacos数据库

create database nacos_dev;
 
use nacos_dev;
CREATE TABLE `config_info` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
 `content` longtext NOT NULL COMMENT 'content',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
 `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
 `effect` varchar(64) DEFAULT NULL COMMENT '配置⽣效的描述',
 `type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
 `c_schema` text COMMENT '配置的模式',
 `encrypted_data_key` text NOT NULL COMMENT '密钥',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
 
 
CREATE TABLE `config_info_aggr` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
 `content` longtext NOT NULL COMMENT '内容',
 `gmt_modified` datetime NOT NULL COMMENT '修改时间',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum`
(`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租⼾字段';
 
 
CREATE TABLE `config_info_beta` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `content` longtext NOT NULL COMMENT 'content',
 `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 `encrypted_data_key` text NOT NULL COMMENT '密钥',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfobeta_datagrouptenant`
(`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
COMMENT='config_info_beta';
 
 
CREATE TABLE `config_info_tag` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
 `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `content` longtext NOT NULL COMMENT 'content',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfotag_datagrouptenanttag`
(`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
COMMENT='config_info_tag';
 
 
 
 
CREATE TABLE `config_tags_relation` (
 `id` bigint(20) NOT NULL COMMENT 'id',
 `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
 `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
 `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, ⾃增⻓标识',
 PRIMARY KEY (`nid`),
 UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
 KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
COMMENT='config_tag_relation';
 
 
CREATE TABLE `group_capacity` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表⽰整个集
群',
 `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表⽰使⽤默认值',
 `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使⽤量',
 `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置⼤⼩上限,单位
为字节,0表⽰使⽤默认值',
 `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合⼦配置最⼤
个数,,0表⽰使⽤默认值',
 `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的⼦
配置⼤⼩上限,单位为字节,0表⽰使⽤默认值',
 `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最⼤变更历史
数量',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量
信息表';
 
 
CREATE TABLE `his_config_info` (
 `id` bigint(20) unsigned NOT NULL COMMENT 'id',
 `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, ⾃增标识',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `content` longtext NOT NULL COMMENT 'content',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`op_type` char(10) DEFAULT NULL COMMENT 'operation type',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 `encrypted_data_key` text NOT NULL COMMENT '密钥',
 PRIMARY KEY (`nid`),
 KEY `idx_gmt_create` (`gmt_create`),
 KEY `idx_gmt_modified` (`gmt_modified`),
 KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租⼾改造';
 
 
CREATE TABLE `tenant_capacity` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
 `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表⽰使⽤默认值',
 `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使⽤量',
 `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置⼤⼩上限,单位
为字节,0表⽰使⽤默认值',
 `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合⼦配置最⼤
个数',
 `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的⼦
配置⼤⼩上限,单位为字节,0表⽰使⽤默认值',
 `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最⼤变更历史
数量',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租⼾容量信息表';
 
 
 
CREATE TABLE `tenant_info` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `kp` varchar(128) NOT NULL COMMENT 'kp',
 `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
 `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
 `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
 `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
 `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
 `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
 KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
 
 
CREATE TABLE `users` (
 `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
 `password` varchar(500) NOT NULL COMMENT 'password',
 `enabled` boolean NOT NULL COMMENT 'enabled'
);
CREATE TABLE `roles` (
 `username` varchar(50) NOT NULL COMMENT 'username',
 `role` varchar(50) NOT NULL COMMENT 'role',
 UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
 `role` varchar(50) NOT NULL COMMENT 'role',
 `resource` varchar(128) NOT NULL COMMENT 'resource',
 `action` varchar(8) NOT NULL COMMENT 'action',
 UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos',
'$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

配置并启动nacos

创建 Nacos 配置文件

创建一个application.properties文件,用于配置 Nacos 连接 MySQL 数据库:

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root

5. 运行 Nacos 容器

使用刚才创建的配置文件来启动 Nacos 容器:

docker run -d \
  --name nacos \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  -v /path/on/host/nacos/conf/application.properties:/home/nacos/conf/application.properties \
  -v /path/on/host/nacos/logs:/home/nacos/logs \
  nacos/nacos-server:2.2.3 \
  -m standalone

同样,请将/path/on/host/nacos替换为你主机上的实际路径。

6. 验证安装结果

Nacos 启动后,你可以通过浏览器访问其管理界面:

http://localhost:8848/nacos

使用默认的用户名和密码nacos/nacos登录。

7. 配置验证

登录 Nacos 管理界面后,你可以在左侧菜单中选择 “配置管理"→"配置列表”,若能正常显示页面,就表明数据库配置成功。

在这里插入图片描述


2 、在 Nacos 客户端配置服务端配置文件

我们可以通过bootstrap.yamlapplication.yaml文件在Nacos客户端配置服务端的配置文件。

1. 文件介绍、bootstrap.yamlapplication.yaml

bootstrapapplication都是springboot项目中的配置文件,他们的主要区别如下:

a、加载顺序区别:

SpringBoot支持同时使用,其加载的顺序为:

bootstrap.properties` > `bootstrap.yaml` >` application.properties`> `application.yaml
b、优先级区别:

bootstrap加载的配置信息是不能被application的相同配置覆盖的,如果两个配置文件同时存在,以bootstrap为主。

c、应用场景区别:

bootstrap常见应用场景:

  • 配置一些固定的,不能被覆盖的属性,用于一些系统级别的参数配置。本地的配置文件是默认不能覆盖远程的配置的。
  • 一些需要加密/解密的场景。
  • 当你使用了NacosSpring Cloud Config配置中心时,需要在boostrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。

application常见应用场景:

  • 常用于SpringBoot项目的自动化配置。
  • 用于一些应用级别的参数配置。

2. 方式一:在application.yaml(或properties )文件中配置【不推荐】

(1)添加依赖

新建一个名称为ConfigApplicationSpringBoot项目,并在其中添加nacos-config相关的依赖。

pom.xml文件:

<!-- nacos-config依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
(2)配置

application.yaml配置文件中配置Nacos Server 地址并引入服务配置。

application.yaml 文件:

server:
  port: 8001

spring:
  application:
    name: nocosConfigService #服务名
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      username: nacos #nacos用户名
      password: nacos #nacos密码

  config:
    import:
      - nacos:redis.yaml?refresh=true #通过spring.config导入nacos中自定义的配置文件

:当配置了权限管理时,必须指定nacos服务器登录的用户名、密码。

3. 方式二:在bootstrap.yaml(或properties )文件中配置【推荐】

(1)添加依赖

新建一个名称为ConfigApplicationSpringBoot项目,并在其中添加nacos-configbootstrap相关的依赖。

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.4</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- nacos-config依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2021.1</version>
        </dependency>
        <!-- bootstrap依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>4.0.3</version>
        </dependency>
        <!-- refresh scope依赖 :动态配置刷新:-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
            <version>4.0.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
(2)配置
a、在application.yaml配置文件中配置普通配置。

application.yaml文件:

server:
  port: 8001
加载默认的配置文件顺序

当在bootstrap.yaml(或properties )文件中进行配置时,Nacos会默认加载Data ID 命名为:${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-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。目前只支持properties(默认)和yaml类型。

注:

  • 只有当在bootstrap.yaml(或properties )文件中进行配置时,Nacos才会加载默认的配置文件;当使用application.yaml(或properties )文件,Nacos将无法加载默认的配置文件。
  • 若要使用Nacos服务端中某一个配置文件作为默认加载的配置文件,则必须在bootstrap.yaml文件中配置与之相对应的spring.application.namespring.cloud.nacos.config.file-extensionspring.cloud.nacos.config.groupspring.cloud.nacos.config.namespace
  • 若要使用Nacos服务端中其他自定义的配置文件,只需在bootstrap.yaml文件中导入该配置文件,不需要在bootstrap.yaml文件中配置与之相对应的spring.cloud.nacos.config.file-extensionspring.cloud.nacos.config.groupspring.cloud.nacos.config.namespace

b、在bootstrap.yaml配置文件中配置Nacos Config 相关的。

bootstrap.yaml文件:

spring:
  application:
    name: redis #服务名
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #Nacos配置中心服务器地址
        username: nacos #Nacos配置中心用户名
        password: nacos #Nacos配置中心密码
        #Nacos默认配置文件设置
        file-extension: yaml #Nacos默认配置文件的类型(默认值:properties)
        group: DEFAULT_GROUP #Nacos默认配置文件的配置分组
        namespace: public #Nacos默认配置文件的命名空间

注:

  • bootstrap.yaml文件中配置的spring.application.namespring.cloud.nacos.config.file-extensionspring.cloud.nacos.config.groupspring.cloud.nacos.config.namespace,只能用来配置与Nacos默认加载的配置文件。
  • 当配置了权限管理时,必须指定nacos服务器登录的用户名、密码。
(3)加载任意的配置文件

Nacos中,我们可以使用shared-configs共享配置)和extension-configs拓展配置)两种方式为同一个项目同时加载多个自定义的配置文件,且每种配置方式都有两种写法。

具体使用步骤如下:

a、创建自定义配置文件

Nacos服务端新建一个名称为shared.yaml共享配置文件和extension.yaml的拓展配置文件。

  • shared.yaml
file:
  name: 共享配置文件
  commInfo: 共享信息

在这里插入图片描述

  • extension.yaml
file:
  name: 拓展配置文件
  extensionInfo: 拓展信息

在这里插入图片描述

(2)加载自定义配置文件

bootstrap.yaml文件中,加载自定义的配置文件。

bootstrap.yaml文件:

spring:
  application:
    name: redis #服务名
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #Nacos配置中心服务器地址
        username: nacos #Nacos配置中心用户名
        password: nacos #Nacos配置中心密码
        #Nacos自定义配置文件设置
        shared-configs: #通过第一种方式导入共享配置文件
          - data-id: shared.yaml
            group: DEFAULT_GROUP #默认值:DEFAULT_GROUP
            refresh: true #默认值:false
        extension-configs[0]: #通过第二种方式导入拓展配置文件
          data-id: extension.yaml
          group: DEFAULT_GROUP #默认值:DEFAULT_GROUP
          refresh: true #默认值:false

(3)测试

TestController中使用自定义配置文件中的配置信息。

TestController.java文件:

package com.js.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //自动更新配置信息
public class TestController {
    @Value(value = "${file.name}")
    private String fileName;
    @Value(value = "${file.commInfo}")
    private String commInfo;
    @Value(value = "${file.extensionInfo}")
    private String extensionInfo;
    
    @GetMapping(path = "/test")
    public String test(){
        return "当前读取的是:【" + fileName + "】中的配置信息;" + " 当前读取的是:【" + commInfo + "】;" + " 当前读取的是:【" + extensionInfo + "】!";
    }
}

启动服务注册中心,启动config-nacos服务,在浏览器中输入http://localhost:8081/test。测试结果如下图所示:

在这里插入图片描述

可以发现这两个配置文件,类似合在一起变成一个配置文件,给加载出来了


3 、在 Nacos 客户端使用配置文件

完成上述步骤后,应用会从Nacos Server中获取相应的配置,并添加在Spring EnvironmentPropertySources中。

此时,我们便可以获取并使用Nacos服务端添加的配置信息了。

:接下来的测试结果都是基于在bootstrap.yaml(或properties )文件中配置进行的。

1. 方式一:通过ConfigurableApplicationContext类获取配置信息

配置文件

server:
  port: 8081
spring:
  application:
    name: redis #服务名
  cloud:
    nacos:
      config:
        server-addr: 123.60.186.19:8848 #Nacos配置中心服务器地址
        username: nacos #Nacos配置中心用户名
        password: nacos #Nacos配置中心密码
        extension-configs: # 扩展配置(优先级高)
          - data-id: redis.yaml
            group: DEFAULT_GROUP
            refresh: true


(1)新建一个名称为TestController的控制器,并在其中通过ConfigurableApplicationContext获取配置信息。

TestController.java文件:

package com.js.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //自动更新配置信息
public class TestController {
    @Autowired
    private ConfigurableApplicationContext applicationContext;
    @GetMapping(path = "/test1")
    public String test1(){
        //获取Nacos服务端添加的配置信息
        String userName1 = applicationContext.getEnvironment().getProperty("user.name");
        String userName2 = applicationContext.getEnvironment().getProperty("user.userName");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        String userSex = applicationContext.getEnvironment().getProperty("user.sex");
        return "Nacos配置变量:user.name: "+userName1+ "; user.userName: "+userName2+", user.age: "+userAge+", user.sex: "+userSex;
    }
}

(2)启动服务注册中心,启动config-nacos服务,在浏览器中输入http://localhost:8001/test1。测试结果如下图所示:

在这里插入图片描述

2. 方式二:通过@Value注解获取配置信息

配置文件

server:
  port: 8081
spring:
  application:
    name: redis #服务名
  cloud:
    nacos:
      config:
        server-addr: 123.60.186.19:8848 #Nacos配置中心服务器地址
        username: nacos #Nacos配置中心用户名
        password: nacos #Nacos配置中心密码
        extension-configs: # 扩展配置(优先级高)
          - data-id: redis.yaml
            group: DEFAULT_GROUP
            refresh: true


(1)在TestController中通过@Value注解获取配置信息,并通过Spring Cloud原生注解 @RefreshScope实现配置自动更新。

TestController.java文件:

package com.js.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //自动更新配置信息
public class TestController {

    @Value(value = "${user.name}")
    private String userName1;
    @Value(value = "${user.userName}")
    private String userName2;
    @Value(value = "${user.age}")
    private int userAge;
    @Value(value = "${user.sex}")
    private String userSex;

    @GetMapping(path = "/test2")
    public String test2(){
       return "Nacos配置变量:user.userName: "+ userName1+ "; user.name: "+userName2+", user.age: "+userAge+", user.sex: "+userSex;
    }
}

(2)启动服务注册中心,启动config-nacos服务,在浏览器中输入http://localhost:8001/test2。测试结果如下图所示:

在这里插入图片描述

3. 方式三:通过@ConfigurationProperties注解配置类获取配置信息

(1)引入Lombok相关的依赖。

pom.xml文件:

<!-- lombok依赖 -->
<dependency>
 <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
(2)新建一个配置类。

MyNacosConfigProperties.java文件:

package com.js.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "user")
public class MyNacosConfigProperties {
    String name;
    String userName;
    int age;
    String sex;
}
(3)使用配置信息。

TestController.java文件:

package com.js.controller;

import com.js.properties.MyNacosConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope //自动更新配置信息
public class Test2Controller {
    @Autowired
    private MyNacosConfigProperties myNacosConfigProperties;
    
    @GetMapping(path = "/test3")
    public String test3(){
        //获取Nacos服务端添加的配置信息
        String userName1 = myNacosConfigProperties.getName();
        String userName2 = myNacosConfigProperties.getUserName();
        int userAge = myNacosConfigProperties.getAge();
        String userSex = myNacosConfigProperties.getSex();
        return "Nacos配置变量:user.userName: "+ userName1+ "; user.name: "+userName2+", user.age: "+userAge+", user.sex: "+userSex;
    }
}
(4)测试

启动服务注册中心,启动config-nacos服务,在浏览器中输入http://localhost:8001/test3。测试结果如下图所示:

在这里插入图片描述
:若在application.yaml(或properties )文件中配置,则springboot 默认会优先加载系统环境变量,此时获取到的user.name的值实际上指的是当前计算机的用户名,而不是Nacos服务端yaml配置文件中指定的user.name的值。因此,我们自定义变量名称时尽量不要与系统环境变量的名称一致。
在这里插入图片描述


4、nacos配置公共与专属配置

以下是shared-configsextension-configs[0]的详细对比解析:

1. 配置优先级(重要区别)

复制加载顺序:extension-configs[0] → extension-configs[1] → shared-configs
生效顺序:后加载的配置会覆盖先加载的(即extension-configs优先级更高)

2. 设计用途对比:

yaml复制shared-configs:
  - 用途:存放多个应用共享的基础配置(如数据库连接、Redis配置等)
  - 特点:跨项目复用性强
  
extension-configs[0]:
  - 用途:存放当前应用特有的扩展配置
  - 特点:可覆盖shared-configs的配置

3. 实际应用场景示例:

# shared-configs(共享配置)
- 数据源配置:spring.datasource.url
- 消息队列配置:spring.rabbitmq.host
- 日志级别配置:logging.level.root

# extension-configs(扩展配置)
- 业务开关配置:feature.toggle.payment
- 应用专属参数:app.redis.timeout
- 环境差异配置:env.specific.param

4. 配置覆盖规则:

在这里插入图片描述

5. 最佳实践建议:

  • 将通用配置放在shared-configs(如中间件连接信息)
  • 将应用专属配置放在extension-configs
  • 需要覆盖共享配置时使用extension-configs
  • 多环境部署时可通过extension-configs加载环境特有配置
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: properties
        # 加载公共配置
        shared-configs:
          - data-id: common-config.yml
            group: DEFAULT_GROUP
            refresh: true  # 支持动态刷新
        # 加载专属配置(优先级高于公共配置)
        ext-config:
          - data-id: ${spring.application.name}.yml
            group: ${spring.profiles.active}
            refresh: true

当前配置中两者都设置了refresh: true,意味着这些配置变更时都会触发应用配置热更新。参考3.3.(3)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASP.NET Web Forms框架识别

ASP.NET 支持三种不同的开发模式&#xff1a; Web Pages&#xff08;Web 页面&#xff09;、MVC&#xff08;Model View Controller 模型-视图-控制器&#xff09;、Web Forms&#xff08;Web 窗体&#xff09;&#xff1a; Web Pages 单页面模式MVC 模型-视图-控制器Web Form…

哈工大计统大作业-程序人生

摘 要 本项目以“程序人生-Hellos P2P”为核心&#xff0c;通过编写、预处理、编译、汇编、链接及运行一个简单的Hello程序&#xff0c;系统探讨了计算机系统中程序从代码到进程的全生命周期。实验基于Ubuntu环境&#xff0c;使用GCC工具链完成代码转换&#xff0c;分析了预处…

设计模式——装饰器设计模式(结构型)

摘要 文中主要介绍了装饰器设计模式&#xff0c;它是一种结构型设计模式&#xff0c;可在不改变原有类代码的情况下&#xff0c;动态为对象添加额外功能。文中详细阐述了装饰器模式的角色、结构、实现方式、适合场景以及实战示例等内容&#xff0c;还探讨了其与其他设计模式的…

途景VR智拍APP:开启沉浸式VR拍摄体验

在数字化时代&#xff0c;VR技术以其沉浸式的体验逐渐走进了人们的日常生活。途景VR智拍APP作为一款集看图和拍照于一体的VR软件&#xff0c;为用户带来了全新的视觉体验和便捷的拍摄方式&#xff0c;无论是专业摄影师还是普通用户&#xff0c;都能轻松上手&#xff0c;拍出令人…

Linux环境搭建MCU开发环境

操作系统版本&#xff1a; ubuntu 22.04 文本编辑器&#xff1a; vscode 开发板&#xff1a; stm32f103c8t6 调试器&#xff1a; st-link 前言 步骤一&#xff1a; 安装交叉编译工具链 步骤二&#xff1a; 创建工程目录结构 步骤三&#xff1a; 调试…

【基础算法】高精度(加、减、乘、除)

文章目录 什么是高精度1. 高精度加法解题思路代码实现 2. 高精度减法解题思路代码实现 3. 高精度乘法解题思路代码实现 4. 高精度除法 (高精度 / 低精度)解题思路代码实现 什么是高精度 我们平时使用加减乘除的时候都是直接使用 - * / 这些符号&#xff0c;前提是进行运算的数…

Windows最快速打开各项系统设置大全

目录 一、应用背景 二、设置项打开方法 2.1 方法一界面查找&#xff08;最慢&#xff09; 2.2 方法二cmd命令&#xff08;慢&#xff09; 2.3 方法三快捷键&#xff08;快&#xff09; 2.4 方法四搜索栏&#xff08;快&#xff09; 2.5 方法五任务栏&#xff08;最快&am…

嵌入式编译工具链熟悉与游戏移植

在自己的虚拟机Ubuntu系统下&#xff0c;逐步编译 mininim源码(波斯王子重制开源版&#xff09; 指令流程 sudo apt-get remove liballegro5-dev liballegro-image5-dev \liballegro-audio5-dev liballegro-acodec5-dev liballegro-dialog5-dev sudo apt-get install automak…

DeepSeek-R1-0528,官方的端午节特别献礼

DeepSeek&#xff1a;端午安康&#xff01;刻在国人骨子里的浪漫 2025 年 05 月 28 日 | DeepSeek 端午特别献礼 当粽叶飘香时&#xff0c;DeepSeek 悄然带来一份节日惊喜 版本号 DeepSeek-R1-0528 正式上线 官方赋予它的灵魂是&#xff1a; 思考更深 推理更强 用户通过官网…

001 flutter学习的注意事项及前期准备

在学习flutter之前&#xff0c;还需要进行一些初始的配置&#xff0c;然后才可以学习flutter 1.安装flutter 国内官网&#xff1a;https://flutter.cn​​​​​​ 国际官网&#xff1a;https://flutter.dev 安装完成后&#xff0c;按照官网上面的操作步骤进行配置&#xf…

CS144 - Lecture 1 记录

CS144 - Lecture 1 由于没讲义&#xff0c;全看课了&#xff0c;系统性的总结有点难&#xff0c;记一些有趣的东西吧。 数据链路和网络层的传输 我们可以看见&#xff0c;对于发送方&#xff0c;我们的数据链路层为我们的网络层提供服务&#xff0c;在经过路由的时候&#xf…

【数据结构】——二叉树--链式结构

一、实现链式结构二叉树 二叉树的链式结构&#xff0c;那么从名字上我们就知道我们这个二叉树的底层是使用链表来实现的&#xff0c;前面我们的二叉树是通过数组来实现的&#xff0c;那么在其是完全二叉树的情况下&#xff0c;此时我们使用数组来实现就会使得其空间浪费较少&a…

充电便捷,新能源汽车移动充电服务如何预约充电

随着新能源汽车的普及&#xff0c;充电便捷性成为影响用户体验的关键因素之一。传统的固定充电桩受限于地理位置和数量&#xff0c;难以完全满足用户需求&#xff0c;而移动充电服务的出现&#xff0c;为车主提供了更加灵活的补能方式。通过手机APP、小程序或在线平台&#xff…

基于 Chrome 浏览器扩展的Chroma简易图形化界面

简介 ChromaDB Manager 是基于 Chrome 浏览器扩展的一款 ChromaDB&#xff08;一个流行的向量数据库&#xff09;的数据查询工具。提供了一个用户友好的界面&#xff0c;可以直接从浏览器连接到本地 ChromaDB 实例、查看集合信息和分片数据。本工具特别适合开发人员快速查看和…

IM系统的负载均衡

1.IM场景的负载均衡 2.方案总览 SDK层想要连接一个TCP网关或者WebSocket网关的方案 SDK单地址:在SDK中写死某个网关的IP或者域名,缺点是更换地址需要重新打包SDK SDK多地址:防止某一个地址嗝屁了写上多个地址用足保持高可用 暴露接口给客户端:SDK层访问接口动态获得地址 注…

使用 Zabbix 监控 MySQL 存储空间和性能指标的完整实践指南

目录 引言 一、最终目标支持功能 二、监控方案设计 2.1 技术选型 2.2 设计思路 三、实现步骤 3.1 准备工作 3.11 创建 MySQL 监控账号 3.12 配置 .my.cnf 文件 3.2 编写统一脚本 3.3 配置 Zabbix Agent UserParameter 3.4 Zabbix 前端配置建议 四、总结 引言 MySQL …

【技能拾遗】——家庭宽带单线复用布线与配置(移动2025版)

&#x1f4d6; 前言&#xff1a;在家庭网络拓扑中&#xff0c;客厅到弱电箱只预埋了一根网线&#xff0c;由于已将广电的有线电视取消并改用IPTV。现在需要解决在客厅布置路由器和观看IPTV问题&#xff0c;这里就用到单线复用技术。 目录 &#x1f552; 1. 拓扑规划&#x1f55…

异步日志监控:FastAPI与MongoDB的高效整合之道

title: 异步日志监控:FastAPI与MongoDB的高效整合之道 date: 2025/05/27 17:49:39 updated: 2025/05/27 17:49:39 author: cmdragon excerpt: FastAPI与MongoDB整合实现日志监控系统的实战指南。首先配置MongoDB异步连接,定义日志数据模型。核心功能包括日志写入接口、聚合…

在 Android 上备份短信:保护您的对话

尽管我们的Android手机有足够的存储空间来存储无数的短信&#xff0c;但由于设备故障、意外删除或其他意外原因&#xff0c;您可能会丢失重要的对话。幸运的是&#xff0c;我们找到了 5 种有效的 Android SMS 备份解决方案&#xff0c;确保您的数字聊天和信息保持安全且可访问。…

标题:2025海外短剧爆发年:APP+H5双端系统开发,解锁全球流量与变现新大陆

描述&#xff1a; 2025年出海新风口&#xff01;深度解析海外短剧系统开发核心&#xff08;APPH5双端&#xff09;&#xff0c;揭秘高效开发策略与商业化路径&#xff0c;助您抢占万亿美元市场&#xff01; 全球娱乐消费模式正在剧变。2025年&#xff0c;海外短剧市场已从蓝海…