Nacos配置管理

1、统一配置管理

配置更改热更新

1.1 添加配置信息

有热更新需求的配置,通过nacos进行配置,而不是所有的配置都放在nacos中配置。

1.2 配置获取的步骤

1.2.1 无nacos配置时

img

1.2.2 有nacos配置时

读取nacos配置新信息就需要一些信息:

  1. 去哪读(nacos地址)
  2. 读取谁

bootstrap.yml的优先级高于application.yml,项目启动会优先读取bootstrap.yml。所以将nacos地址、配置文件等相关信息配置在bootstrap.yml中

img

1.3 获取配置实现

1.3.1 引入nacos的配置管理客户端依赖

1
2
3
4
5
<!--nacos配置管理客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

1.3.2 添加bootstrap.yml文件

在user-service中的resource目录下,添加一个bootstrap.yml文件,该文件是引导文件,优先级高于application.yml:

1
2
3
4
5
6
7
8
9
10
spring:
application:
name: userservice
profiles:
active: dev #开发环境,这里时dev
cloud:
nacos:
server-addr: localhost:8848 #Nacos地址
config:
file-extension: yaml # 文件后缀名

1.3.3 测试

在user-service中将pattern.dateformat这个属性注入到UserController中做测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Value("${pattern.dataformat}")
private String dateformat;

@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat, Locale.CHINA));
}

//...
}

注意:@Value注解使用spring的,而不是loombook的

nacos建立配置后需要重启nacos,否则@Value注解不生效

1.4 总结

将配置交给Nacos管理的步骤

① 在Nacos中添加配置文件

② 在微服务中引入nacos的config依赖

③ 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件

2、配置热更新

Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:

2.1 使用@RefreshScope注解

@Value注入的变量所在类上添加注解@RefreshScope

1
2
3
4
5
6
7
8
9
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope // 该注解实现nacos配置自动刷新
public class UserController {
@Value("${pattern.dataformat}")
private String dateformat;
//...
}

2.2 使用@ConfigurationProperties注解

1
2
3
4
5
6
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}

2.3 注意事项

• 不是所有的配置都适合放到配置中心,维护起来比较麻烦

• 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置

3、配置共享

3.1 多环境配置共享

微服务启动时会从nacos读取多个配置文件:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml 环境配置
  • [spring.application.name].yaml,例如:userservice.yaml 默认配置,多环境共享

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件。

img

3.2 多种配置的优先级

[服务名]-[环境].yaml>[服务名].yaml > 本地配置

4、搭建Nacos集群

  1. 搭建MySQL集群并初始化数据库表
  2. 下载解压nacos
  3. 修改集群配置(节点信息)、数据库配置
  4. 分别启动多个nacos节点
  5. nginx反向代理

参考Nacos集群搭建

点击这里查看实例代码


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!