当前位置:网站首页>Nacos配置管理
Nacos配置管理
2022-07-17 05:06:00 【兮动人】
1. 统一配置管理
配置更改热更新


在Nacos中添加配置信息:


配置获取的步骤如下:

- 引入Nacos的配置管理客户端依赖:
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在userservice中的resource目录添加一个
bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 开发环境
cloud:
nacos:
server-addr: 47.107.53.146:8848 # nacos 地址
config:
file-extension: yaml # 文件后缀名
- 在
user-service中将pattern.dateformat这个属性注入到UserController中做测试:
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Value("${pattern.dateformat}")
private String dateformat;
/** * 路径: /user/110 * * @param id 用户id * @return 用户 */
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id) {
return userService.queryById(id);
}
@GetMapping("/now")
public String now() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
}


可以看到 8081 和 8082 两个微服务都可以访问到被格式化的时间,说明都可以从 nacos 控制台中读取到配置文件的信息
小节:
- 将配置交给Nacos管理的步骤
- 在Nacos中添加配置文件
- 在微服务中引入nacos的config依赖
- 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件
2. 配置自动刷新
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:
更改 userservice-dev.yaml 配置文件:

- 方式一:在
@Value注入的变量所在类上添加注解@RefreshScope
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
- 可以看到在不重启服务的情况下,更改 nacos 上的配置文件也能达到一致的效果

- 方式二:使用
@ConfigurationProperties注解代替@Value注解。
配置更改如下:

在user-service服务中,添加一个类,读取
patterrn.dateformat属性:
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
- UserController 添加:
@Autowired
private PatternProperties properties;
@GetMapping("/now")
public String now() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
}
可以看到,在不重新启动服务的情况下修改nacos上对于的配置文件也能达到一致的效果

小节:
Nacos配置更改后,微服务可以实现热更新,方式:
①通过@Value注解注入,结合@RefreshScope来刷新
②通过@ConfigurationProperties注入,自动刷新
- 注意事项:
不是所有的配置都适合放到配置中心,维护起来比较麻烦
建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置
3. 多环境配置共享
微服务启动时会从nacos读取多个配置文件:
- [spring.application.name]-[spring.profiles.active].yaml,例如:
userservice-dev.yaml - [spring.application.name].yaml,例如:
userservice.yaml
无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件
新建
userservice.yaml配置文件如下:
验证 userservice.yaml 配置的是否一定被读取到
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
private String envShareValue;
}
- bootstrap.yml 如下,表示 userservice.yaml 和 userservice-dev.yaml 文件一定会被读取到

@Autowired
private PatternProperties properties;
@GetMapping("prop")
public PatternProperties properties() {
return properties;
}
启动 userservice 8082 环境,修改为 test 配置文件的环境

此时这个服务只能读取到 userservice.yml 配置文件
userservice 8081 读取如下

userservice 8082 读取如下

此时这两个服务都能拿到这个共享的属性值,说明 userservice.yml 里的配置文件属性是共享的

也可以在控制台上看到读取的配置文件的信息
如果在 nacos 配置中,userservice.yaml 和 userservice-dev.yaml 两个配置文件中都存在同一个属性,以哪个配置文件为准?如果在 idea 中也有相同的配置文件属性,以哪个为准?
在远端和本地都配置同一个属性,测试如下:

application.yml
在 本地加上 name 属性值
在 远端 nacos 的 userservice.yml 加上

访问属性值,发现是以nacos上的 userservice.yml 为准

userservice-dev.yml 加上

测试,发现在本地配置文件的属性和 远端 userservice.yml 、userservice-dev.yml 都同时存在属性的情况下,以
userservice-dev.yml为准
多种配置的优先级:

小节:
微服务会从nacos读取的配置文件:
①[服务名]-[spring.profile.active].yaml,环境配置
②[服务名].yaml,默认配置,多环境共享优先级:
①[服务名]-[环境].yaml>[服务名].yaml> 本地配置
边栏推荐
- Hire the server, and the pytorch environment training yolov5 model tutorial deployed on pycharm professional edition. Server environment installation library file:
- Email (including attachments, Netease, QQ)
- 一个问题的探讨
- STL容器——map的基本操作
- 多功能(实现)封装函数
- Internship project 2 - Homepage configuration - my data module
- 学习C语言第二天
- [ES6] use multiple functions such as adding data, filtering and transmitting to the page to realize cases
- 交换机用户模式、特权模式、全局模式、端口模式
- BUUCTF web WarmUp
猜你喜欢

Uniapp uses uview to realize folding panel

Baidu map realizes thermal map

Applet editor rich text editing and rich text parsing

MapBox 加载本地离线地形

Email (including attachments, Netease, QQ)

关于New_Online_Judge_1081_哥德巴赫猜想的思考

ThreadLocal thread safety example and its principle

uniapp 使用uview实现折叠面板

实习项目3-更改所有者

【C语言—零基础第六课】输入输出语句格式与复合语句
随机推荐
【C语言—零基础第十课】数组王国奇遇记
父组件加scoped有时也会影响子组件
Actual cases of data analysis and data mining local house price prediction (716):
Use (offset, page) in JS to achieve login effect
[ES6] quickly print user information to the page
Three high concurrency methods to realize I++
ArcGIS Pro发布服务
C语言 带你 手撕 通讯录
使用js中的(offset,page)实现登录效果
H5如何获取内网IP和公网IP
Excel导入长数据末尾变000
哨兵二号轨道数据下载
C语言练习题
【C语言—零基础第六课】输入输出语句格式与复合语句
学习C语言第7天
读论文《SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images》
Case summary of rotation chart moving speed (constant speed, slow motion)
轮播图的两种方法及自动轮播
MapBox 加载本地离线地形
【Es6】详细解说Set ,Array的常用对象及其他方法(完整版)