服务配置
微服务下配置文件的一些问题:
- 配置文件相对分散
- 配置文件无法区分环境
- 配置文件无法实时更新
基于这些问题,我们就需要配置中心来解决
思路
- 首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口
- 当各个服务需要获取配置的时候,就来配置中心拉取自己的配置
- 当配置中心的各种参数又更新的时候,也能够通知到各个服务实时过来同步最新的信息,使之动态更新
nacos config
使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们将各个微服务的配置文件统一存放到nacos上,然后各个服务从nacos上拉取即可
相关概念
- 命名空间(namespace):命名空间用于进行不同环境的配置隔离
- 创建:在控制页面中命名空间里创建
- 使用:通过设置配置文件
spring.cloud.nacos.config.namespace=命名空间id
进行使用
- 配置分组(group):配置分组用于将不同的服务归到一组。一般一个项目下的微服务分为一组
- 配置集(data id):在系统中,一个配置文件通常就是一个配置集
使用
-
导入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
在微服务中添加nacos config配置
注意:不能使用application.yml配置文件,而是bootstrap.yml
优先级由高到低:
- bootstrap.properties
- bootstrap.yml
- application.properties
- application.yml
spring: application: name: 服务名称 cloud: nacos: config: server-addr: localhost:8848 #nacos的服务端地址 file-extension: yaml #配置格式 profiles: active: dev #环境标识
-
在nacos页面中,配置管理添加一个配置
Data ID 格式为:服务名称-环境标识.配置格式
动态刷新
- 硬编码方式:通过ConfigurableApplicationContext的getEnvironment().getProperty方式获取的配置信息本身就可以实现动态刷新
- 注解方式:通过@Value("${}")的方式默认是不能动态刷新的,需要在类上添加@RefreshScope注解实现动态刷新
配置共享
当配置越来越多时,会发现很多配置是重复的,这时候就考虑将公共的配置文件提前出来,实现共享
同一个微服务的不同环境
配置环境时,data id的格式为:服务名称-环境标识.配置格式,如果去掉-环境标识
,这样这个配置就成为了这个服务的公共配置
不同微服务
-
在nacos配置管理中添加一个配置文件,名称
随意.配置格式
-
在微服务中添加配置
spring: cloud: nacos: config: shared-dataids: Data ID #要引入的配置 refreshable-dataids: Data ID #要实现动态刷新的配置