Nacos 配置文件总结

article/2025/6/17 1:15:42

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: atangbijiage: 5sex:

在这里插入图片描述

:当在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: 8001spring:application:name: nocosConfigService #服务名cloud:nacos:server-addr: 127.0.0.1:8848username: 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.yamlgroup: DEFAULT_GROUP #默认值:DEFAULT_GROUPrefresh: true #默认值:falseextension-configs[0]: #通过第二种方式导入拓展配置文件data-id: extension.yamlgroup: DEFAULT_GROUP #默认值:DEFAULT_GROUPrefresh: 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.yamlgroup: DEFAULT_GROUPrefresh: 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 {@Autowiredprivate 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.yamlgroup: DEFAULT_GROUPrefresh: 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 {@Autowiredprivate 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:8848file-extension: properties# 加载公共配置shared-configs:- data-id: common-config.ymlgroup: DEFAULT_GROUPrefresh: true  # 支持动态刷新# 加载专属配置(优先级高于公共配置)ext-config:- data-id: ${spring.application.name}.ymlgroup: ${spring.profiles.active}refresh: true

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


http://www.hkcw.cn/article/ljkWwhxnmo.shtml

相关文章

一文读懂MCP模型上下文协议

前言&#xff1a;MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;作为一个全新的开源协议框架被提出&#xff0c;它试图重塑模型开发、集成与协作的方式。MCP让只能人机交互的大模型转化为了能够快速对接各类业务系统的生产力大脑。传统做法通常…

C#数字图像处理(一)

文章目录 1.C#图像处理基础1.1 Bitmap类1.2 Bitmapdata类1.3 Graphics类1.4 Image类 2.彩色图像灰度化1.提取像素法2.内存法3.指针法三种方法的比较4.灰度图像二值化&#xff1a; 3.相关链接 Bitmap类、 Bitmapdata类和 Graphics类是C#图像处理中最重要的3个类,如果要用C# 进行…

各种数据库,行式、列式、文档型、KV、时序、向量、图究竟怎么选?

慕然回首&#xff0c;发现这些年来涌现出了许多类型的数据库&#xff0c;今天抽空简单回顾一下&#xff0c;以便于后面用到时能快速选择。 1. 关系型数据库(行式) 关系型数据库&#xff08;RDBMS&#xff09;&#xff0c;我们常说的数据库就是指的关系型数据库。 它的全称是关…

uView UI的使用

1. uView UI 封装了request.get登方法请求&#xff0c;异步调用。 故需可以使用then, catch, finally uView UI. 是一个专为UniApp设计的跨平台UI框架, 注意这里是跨平台&#xff0c;也就是可以再IOS, ANDROID 机器上运行的框架 2. easycom 词面意思容易使用的组件 在使用…

win32相关(临界区)

临界区 每个线程都有自己的栈&#xff0c;而局部变量是存在在栈中的&#xff0c;这就意味着每个线程都有一份自己的”局部变量“&#xff0c;如果线程仅仅只是使用自己的”局部变量“那么就不会有线程安全问题&#xff0c;那如果多个线程使用一个全局变量呢&#xff1f; 我们用…

UE5蓝图暴露变量,在游戏运行时修改变量实时变化、看向目标跟随目标Find Look at Rotation、修改玩家自身弹簧臂

UE5蓝图中暴露变量&#xff0c;类似Unity中public一个变量&#xff0c;在游戏运行时修改变量实时变化 1&#xff0c;添加变量 2&#xff0c;设置变量的值 3&#xff0c;点开小眼睛&#xff0c;此变量显示在编辑器中&#xff0c;可以运行时修改 看向目标跟随目标Find Look at R…

112 Gbps 及以上串行链路的有效链路均衡

通道均衡已成为当今高速串行链路的关键机制。目前有许多均衡方案&#xff0c;例如发射机加重均衡、接收机CTLE&#xff08;连续时间线性均衡器&#xff09;、FFE&#xff08;前馈均衡器&#xff09;、DFE&#xff08;判决反馈均衡器&#xff09;和FEC&#xff08;前向纠错&…

【LLM相关知识点】关于LangChain框架学习简单整理(三)

【LLM相关知识点】关于LangChain框架学习简单整理&#xff08;三&#xff09; 一、核心模块和协作模式 参考极简LangChain智能体开发入门指南&#xff0c;LangChain官方文档 LangChain核心模块与功能&#xff1a; 核心模块功能描述关键技术点​模型I/O管理大模型输入输出&a…

基于CangjieMagic的RAG技术赋能智能问答系统

目录 引言 示例程序分析 代码结构剖析 导入模块解读 智能体配置详情 提示词模板说明 主程序功能解析 异步聊天功能实现 检索信息展示 技术要点总结 ollama 本地部署nomic-embed-text 运行测试 结语 引言 这段时间一直在学习CangjieMagic。前几天完成了在CangjieMa…

【速通RAG实战:进阶】18、如何利用LLM记忆功能,实现一对一的个性化服务

一、赛博记忆的本质:从数据到数字人格的进化 (一)核心概念与技术定位 赛博记忆(Cyber Memory)是通过AI技术将个人多源数据(文本、图像、生物特征等)转化为可交互的动态记忆系统,其终极目标是构建可进化的数字人格,实现记忆的存储、重构与智能响应。与传统数据存储不…

C++深入类与对象

在上一篇中提到了构造函数&#xff0c;那么这篇再来提一下构造函数&#xff0c;编译器自动生成的默认构造函数对于内置类型不做处理&#xff0c;自定义类型会调用它自己的构造函数。对于自己写的构造函数&#xff0c;之前是在函数体中初始化&#xff0c;当然不止这一种初始化&a…

创新型老年综合评估实训室建设方案:提升评估实训精准性

随着人口老龄化加剧&#xff0c;老年综合评估人才需求激增&#xff0c;建设创新型老年综合评估实训室&#xff0c;是提升评估实训精准性、培育专业人才的关键路径。点击获取实训室建设方案 一、建设背景与意义 &#xff08;一&#xff09;行业发展需求 1、老龄化社会对老年综…

凤凰古城举行端午抢鸭子活动 欢乐江中庆佳节

5月31日,湖南凤凰古城沱江上举行了一场备受期待的“抢鸭子”大赛。500只精心挑选的鸭子被投入江中,其中一些鸭子颈项间系着鲜艳红绸带,象征好运。随着一声悠长的吆喝声响起,早已准备好的参赛者们纷纷跃入清凉的江水中。现场瞬间变成了欢乐的海洋,游客和市民一同沉浸在浓厚…

【深度学习】16. Deep Generative Models:生成对抗网络(GAN)

Deep Generative Models&#xff1a;生成对抗网络&#xff08;GAN&#xff09; 什么是生成建模&#xff08;Generative Modeling&#xff09; 生成模型的主要目标是从数据中学习其分布&#xff0c;从而具备“生成”数据的能力。两个关键任务&#xff1a; 密度估计&#xff0…

卢伟冰:诋毁本身就是一种仰望 小米汽车成功之道

小米集团合伙人、总裁卢伟冰昨晚谈到了小米汽车的成功。他表示,无论是SU7的热销还是YU7获得更高关注和期待,都基于强大的产品力。小米以“十倍投入做一辆好车”的决心,赢得了千万网友的认可。卢伟冰强调,小米汽车的成功体现了小米的价值观、模式和方法论。他还引用了莫言的…

西安交大原校长徐通模逝世 沉痛悼念与缅怀

沉痛悼念并深切缅怀徐通模同志。中国共产党优秀党员、西安交通大学原校长、我国动力工程与工程热物理领域著名专家、西安交通大学能源与动力工程学院热能工程系徐通模教授,因病医治无效,于2025年5月31日下午14时16分在西安逝世,享年86岁。徐通模同志1939年11月生于江苏如皋,…

性能优化 - 理论篇:常见指标及切入点

文章目录 引言一、 Java 性能优化的核心思路二、为什么要度量&#xff1f;三、常用性能衡量指标详解3.1 吞吐量与响应速度3.2 响应时间的具体度量&#xff1a;平均响应时间与百分位数3.3 并发量3.4 秒开率&#xff08;页面秒开&#xff09;3.5 正确性&#xff08;功能可用性&am…

Java代码重构:如何提升项目的可维护性和扩展性?

Java代码重构&#xff1a;如何提升项目的可维护性和扩展性&#xff1f; 在Java开发领域&#xff0c;随着项目规模的不断扩大和业务需求的频繁变更&#xff0c;代码的可维护性和扩展性逐渐成为了项目成功的关键因素。代码重构作为一种优化代码质量的重要手段&#xff0c;能够在…

【数据集】全球无缝高分辨率1 km 月均地表温度和气温(2001-2020)

目录 数据概述一、输入数据(Input Data)二、模型处理(Modeling and Processing)2.1 清空缺值重建(Clear-sky Ts Reconstruction)2.2 多云条件下地表温度重建(Cloudy-sky Ts Reconstruction)2.3 近地表气温估算(Ta Estimation)2.4 准确性验证与对比三、输出结果与产品…

Vue能启动但访问空白?并报”export ‘default’ (imported as ‘Vue’) was not found in ‘vue’

场景 如图&#xff0c;vue项目的node_modules下载顺利&#xff0c;启动也顺利&#xff0c;但是访问却为空白页面 虽然页面是空白&#xff0c;但是通过浏览器控制台可以看出并非简单的空白&#xff0c;确实有不兼容问题在里面 分析问题 从上图浏览器控制台可以看出&#xff0c…