Nacos统一配置管理
Nacos
统一配置管理
将一部分配置信息写到Nacos配置文件中,可以统一管理,并且这个文件支持热加载。
新建配置步骤:配置管理 -> 配置列表 -> 新建配置
Data ID(配置文件名id) 命名规范:服务名称-dev(profile运行环境).yaml
Group(分组) :DEFAULT_GROUP
原先后端启动的步骤是:
- 项目启动
- 读取本地配置application.yml
- 创建spring容器
- 加载bean
现在要从Nacos中读取配置文件,而次操作必须要在读取本地配置文件之前。
那么获取Nacos地址的配置就要在application.yml
之前进行
所以需要建立一个优先级比application.yml
优先级更高的配置文件:bootstrap.yml
并将Nacos地址的配置信息写进去。
操作
第一步:引入Nacos的配置管理客户端依赖
<!--Nacos 客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Nacos 配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
第二步:新建bootstrap.yml
引导文件,将服务名,nacos地址,环境,等信息写到里面
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #环境
cloud:
nacos:
server-addr: localhost:8848 # Nacos 地址
config:
file-extension: yaml # 文件后缀
discovery:
cluster-name: HB # 集群名称
第三步:后端想要获取该配置信息,可以通过@Value("${}")
的方式获取
@Value("${pattern.dateformat}")
private String dateformat;
/**
* 获取当前时间
* @return
*/
@GetMapping("/now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
配置热更新
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:
方式一:在@Value
注入的变量所在类
上添加注解@RefreshScope
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Value("${pattern.dateformat}")
private String dateformat;
/**
* 获取当前时间
* @return
*/
@GetMapping("/now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
}
方式二:新建一个配置类,使用@ConfigurationProperties
注解
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
注意:
- 不是所有的配置都适合放到配置中心,维护比较麻烦
- 建议将一些关键参数,需要运行时调整的参数放到Nacos配置中心,一般都是自定义配置。