Nacos 配置文件总结
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.yaml
和application.yaml
文件在Nacos
客户端配置服务端的配置文件。
1. 文件介绍、bootstrap.yaml
和application.yaml
bootstrap
和application
都是springboot
项目中的配置文件,他们的主要区别如下:
a、加载顺序区别:
SpringBoot
支持同时使用,其加载的顺序为:
bootstrap.properties` > `bootstrap.yaml` >` application.properties`> `application.yaml
b、优先级区别:
bootstrap
加载的配置信息是不能被application
的相同配置覆盖的,如果两个配置文件同时存在,以bootstrap
为主。
c、应用场景区别:
bootstrap
常见应用场景:
- 配置一些固定的,不能被覆盖的属性,用于一些系统级别的参数配置。本地的配置文件是默认不能覆盖远程的配置的。
- 一些需要加密/解密的场景。
- 当你使用了
Nacos
或Spring Cloud Config
配置中心时,需要在boostrap
配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
application
常见应用场景:
- 常用于
SpringBoot
项目的自动化配置。 - 用于一些应用级别的参数配置。
2. 方式一:在application.yaml(或properties )文件中配置【不推荐】
(1)添加依赖
新建一个名称为ConfigApplication
的SpringBoot
项目,并在其中添加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)添加依赖
新建一个名称为ConfigApplication
的SpringBoot
项目,并在其中添加nacos-config
和bootstrap
相关的依赖。
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.name
、spring.cloud.nacos.config.file-extension
、spring.cloud.nacos.config.group
,spring.cloud.nacos.config.namespace
。 - 若要使用
Nacos
服务端中其他自定义的配置文件,只需在bootstrap.yaml
文件中导入该配置文件,不需要在bootstrap.yaml
文件中配置与之相对应的spring.cloud.nacos.config.file-extension
、spring.cloud.nacos.config.group
,spring.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.name
、spring.cloud.nacos.config.file-extension
、spring.cloud.nacos.config.group
,spring.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 Environment
的 PropertySources
中。
此时,我们便可以获取并使用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-configs
和extension-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)
相关文章:

Nacos 配置文件总结
Nacos 配置文件总结 文章目录 Nacos 配置文件总结1 、在 Nacos 服务端添加配置文件1. 启动Nacos Server。2. 新建配置文件。3. 发布配置集后,我们便可以在配置列表中查看相应的配置文件。4. 配置nacos数据库5. 运行 Nacos 容器6. 验证安装结果7. 配置验证 2 、在 Na…...

ASP.NET Web Forms框架识别
ASP.NET 支持三种不同的开发模式: Web Pages(Web 页面)、MVC(Model View Controller 模型-视图-控制器)、Web Forms(Web 窗体): Web Pages 单页面模式MVC 模型-视图-控制器Web Form…...
LG P4119 [Ynoi2018] 未来日记 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作分两种: replace ( l , r , x , y ) \operatorname{replace}(l,r,x,y) replace(l,r,x,y):将 a l ∼ a r a_l\sim a_r …...
流程引擎选型指南
流程引擎选型指南 流程引擎是企业实现业务流程自动化(BPM)的核心组件,选择合适的流程引擎对系统架构和未来发展至关重要。以下是主流流程引擎的综合对比和选型建议。 一、主流流程引擎对比 引擎名称开源/商业BPMN支持DMN支持CMMN支持云原生支持社区活跃度学习曲线…...
基于大模型预测带状疱疹(无并发症)诊疗方案的研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、带状疱疹概述 2.1 病因与发病机制 2.2 流行病学特征 2.3 临床表现与诊断标准 三、大模型技术原理及应用于带状疱疹预测的可行性 3.1 大模型技术简介 3.2 应用可行性分析 四、大模型预测带状疱疹的具体方…...

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

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

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

Linux环境搭建MCU开发环境
操作系统版本: ubuntu 22.04 文本编辑器: vscode 开发板: stm32f103c8t6 调试器: st-link 前言 步骤一: 安装交叉编译工具链 步骤二: 创建工程目录结构 步骤三: 调试…...
Android高级开发第一篇 - JNI(初级入门篇)
文章目录 Android高级开发JNI开发第一篇(初级入门篇)🧠 一、什么是 JNI?✅ 为什么要用 JNI? ⚙️ 二、开发环境准备开发工具 🚀 三、创建一个支持 JNI 的 Android 项目第一步:创建新项目项目结构…...
Kubernetes RBAC权限控制:从入门到实战
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言:为什么需要RBAC? 在Kubernetes集群中,权限失控是导致安全漏洞的核心原因之一。试想以下场景: 开发…...
python实战项目71:基于Python的US News世界大学排名数据爬取
python实战项目71:基于Python的US News世界大学排名数据爬取 一、项目背景1.1 研究意义1.2 技术背景1.3 应用场景二、爬虫系统设计与实现2.1 分析页面、寻找数据真实接口2.2 发送请求,获取响应内容2.3 提取数据2.4 保存数据三、完整代码四、总结与展望一、项目背景 1.1 研究…...

【基础算法】高精度(加、减、乘、除)
文章目录 什么是高精度1. 高精度加法解题思路代码实现 2. 高精度减法解题思路代码实现 3. 高精度乘法解题思路代码实现 4. 高精度除法 (高精度 / 低精度)解题思路代码实现 什么是高精度 我们平时使用加减乘除的时候都是直接使用 - * / 这些符号,前提是进行运算的数…...
跨平台开发框架electron
桌面端开发框架有很多,比如C#的WPF和Winform,Dart的Flutter,JS的Electron,Rust的Tauri。 目前应用比较广的是Electron,比如我们常见的开发工具VsCode,就是基于Electron开发的。 所以这篇文章我们就来聊聊Electron。 简…...

Windows最快速打开各项系统设置大全
目录 一、应用背景 二、设置项打开方法 2.1 方法一界面查找(最慢) 2.2 方法二cmd命令(慢) 2.3 方法三快捷键(快) 2.4 方法四搜索栏(快) 2.5 方法五任务栏(最快&am…...

嵌入式编译工具链熟悉与游戏移植
在自己的虚拟机Ubuntu系统下,逐步编译 mininim源码(波斯王子重制开源版) 指令流程 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:端午安康!刻在国人骨子里的浪漫 2025 年 05 月 28 日 | DeepSeek 端午特别献礼 当粽叶飘香时,DeepSeek 悄然带来一份节日惊喜 版本号 DeepSeek-R1-0528 正式上线 官方赋予它的灵魂是: 思考更深 推理更强 用户通过官网…...
LNMP环境中php7.2升级到php7.4
以下是 CentOS 7 上从 PHP 7.2 升级到 PHP 7.4 的详细步骤,结合知识库中的方法和注意事项: 1.备份现有环境 #备份 PHP 配置文件 cp /etc/php.ini /etc/php.ini.bak cp -r /etc/php.d /etc/php.d.bak#备份网站文件和数据库 tar -czvf website_backup.tar…...

001 flutter学习的注意事项及前期准备
在学习flutter之前,还需要进行一些初始的配置,然后才可以学习flutter 1.安装flutter 国内官网:https://flutter.cn 国际官网:https://flutter.dev 安装完成后,按照官网上面的操作步骤进行配置…...
FactoryBean 接口
Spring 框架中 FactoryBean 接口的特性,这是 Spring 提供的一种特殊机制,用于创建和管理复杂 Bean。让我通过示例和解释帮您理解这个概念。 一、FactoryBean 是什么? FactoryBean 是 Spring 框架提供的一个工厂接口,用于创建复杂…...

CS144 - Lecture 1 记录
CS144 - Lecture 1 由于没讲义,全看课了,系统性的总结有点难,记一些有趣的东西吧。 数据链路和网络层的传输 我们可以看见,对于发送方,我们的数据链路层为我们的网络层提供服务,在经过路由的时候…...
【Redis】大key问题详解
目录 1、什么是大key2、大key的危害【1】阻塞风险【2】网络阻塞【3】内存不均【4】持久化问题 3、如何发现大key【1】使用内置命令【2】使用memory命令(Redis 4.0)【3】使用scan命令【4】监控工具 4、解决方案【1】拆分大key【2】使用合适的数据结构【3】…...

【数据结构】——二叉树--链式结构
一、实现链式结构二叉树 二叉树的链式结构,那么从名字上我们就知道我们这个二叉树的底层是使用链表来实现的,前面我们的二叉树是通过数组来实现的,那么在其是完全二叉树的情况下,此时我们使用数组来实现就会使得其空间浪费较少&a…...
TKernel模块--杂项
TKernel模块–杂项 1.DEFINE_HARRAY1 #define DEFINE_HARRAY1(HClassName, _Array1Type_) \ class HClassName : public _Array1Type_, public Standard_Transient { \public: …...

充电便捷,新能源汽车移动充电服务如何预约充电
随着新能源汽车的普及,充电便捷性成为影响用户体验的关键因素之一。传统的固定充电桩受限于地理位置和数量,难以完全满足用户需求,而移动充电服务的出现,为车主提供了更加灵活的补能方式。通过手机APP、小程序或在线平台ÿ…...
laya3的2d相机与2d区域
2d相机和2d区域都继承自Sprite。 2d相机必须作为2d区域的子节点,且2d相机必须勾选isMain才能正常使用。 2d区域下如果没有主相机,则他和Sprite无异,他的主要操作皆是针对主相机。 2d相机可以调整自己的移动范围,是否紧密跟随&a…...
2024 CKA模拟系统制作 | Step-By-Step | 19、题目搭建-升级集群
目录 免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、考点分析 1. Kubernetes 升级策略 2. 节点维护操作 3. 组件升级技术 4. 权限与访问控制 三、考点详细讲解 1. Kubernetes 升级流程 2. 组件版本兼容性 3. drain 操作深度解析 四、实验环境搭建步骤 五、总…...
47道ES67高频题整理(附答案背诵版)
1.ES5、ES6(ES2015)有什么区别? ES5(ECMAScript 5)和ES6(也称为ECMAScript 2015)是JavaScript语言的两个版本,它们之间有一些重要的区别和改进: let 和 const 关键字: …...
Lauterbach TRACE32专栏
官方培训视频 trace32使用技巧博文 系统崩溃分析 - vmcore 加载到 Trace32 Trace 32 离线 dump 分析环境搭建方法 内核trace分析工具入门 如何用Trace32分析内核死机 trace32调试攻略 TRACE32调试:基础调试技巧之SystemMode、SNOOPer https://cloud.tencent…...

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