当前位置:网站首页>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
> 本地配置
边栏推荐
猜你喜欢
随机推荐
es6新增-let和const (var的缺点&let及const)
es6新增-数组/对象的解构赋值
轮播图节流阀原理及本地存储归总
C语言初学者之初识代码专项练习
es6新增-字符串部分
Case summary of rotation chart moving speed (constant speed, slow motion)
BUUCTF 杂项——二维码
单臂路由配置
[ES6] use multiple functions such as adding data, filtering and transmitting to the page to realize cases
使用Echars实现水滴状、环形图、分割图、堆叠、组织架构图、地图轮廓等图表
js 原生对象加属性
uniapp中使用ucharts图表,饼状图,柱状图,折线图
Wechat applet status bar
手把手教你复现Log4j2核弹级漏洞
学习C语言的第四天
Applet editor rich text editing and rich text parsing
微信小程序状态栏
JS native object plus attributes
多功能(实现)封装函数
【Es6】forEach,for... in ,for... Of column, which allows you to quickly distinguish the usage and differences of various for statements through project cases (full version). There are detailed notes ins