Nacos不仅可以作为注册中心,还可以作为管理中心
我们可以将程序的配置进行统一管理

传统项目处理配置的问题

没有「配置中心」的传统项目中,我们是怎么处理各类配置参数问题的:

1. 静态化配置

大多数在项目配置写在例如 application.propertie或者application.yml中
然后将各类 参数配置、应用配置、环境配置、安全配置、业务配置 都写到这个文件里。
当项目代码逻辑中需要使用配置的时候,就从这个配置文件中读取。
这种做法虽然简单,但如果参数需要修改,就非常的不灵活,甚至需要重启运行中的项目才能生效

2. 配置文件无法区分环境。

由于配置文件是放在项目中的,但是我们项目可能会有多个环境,
例如:测试环境、预发布环境、生产环境。
每一个环境所使用的配置参数理论上都是不同的,
所以我们在配置文件中根据不同环境配置不同的参数,这些都是手动维护,
在项目发布的时候,极其容易因开发人员的失误导致出错。

3. 配置文件过于分散

如果一个项目中存在多个逻辑模块独立部署,每个模块所使用的配置内容又不相同,
传统的做法是会在每一个模块中都放一个配置文件,甚至不同模块的配置文件格式还不一样。
那么长期的结果就是配置文件过于分散混乱,难以管理。

4. 配置修改无法追溯

因为采用的静态配置文件方式,所以当配置进行修改之后,不容易形成记录,更无法追溯是谁修改的、修改时间是什么、修改前是什么内容。
既然无法追溯,那么当配置出错时,更没办法回滚配置了。

一、配置中心

Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。
使用Spring Cloud Alibaba Nacos Config,就可以在Nacos Server集中管理Spring Cloud应用的外部属性配置

1、启动

  1. ./startup.sh -m standalone

2、添加配置信息

Nacos config 是在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中;
SpringCloud Alibaba应用需要使用bootstrap.properties或者bootstrap.yml等其他类型文件进行配置相关nacos信息

Nacos Config使用Datald和GROUP确定一个配置;
启动好Nacos之后,在Nacos添加如下的配置:

1、nacos 新建配置

image.png

image.png
DataId设置为应用名+配置文件的格式
如:application.yml application.properties(默认为properties格式,可省略扩展名)
需要保证应用的GROUPID和新建应用配置中设置的GROUPID一致
即: spring.cloud.nacos.config.group=DEV_GROUP
image.png

将程序中的配置信息进行统一管理

只需要在程序中添加配置相关依赖即可

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  8. </dependency>

SpringCloud bootstrap.properties文件的读取优先于application.properties
所有关于SpringCloud的配置要写在bootstrap.properties文件中
image.png
nacos配置修改之后不需要重启客户端,会自动刷新

注意,nacos配置中心的配置格式默认为properties格式,要想要使用其他格式,就需要在程序配置文件之中配置
image.png

  1. spring:
  2. application:
  3. name: nacos-discovery-provider
  4. cloud:
  5. nacos:
  6. config:
  7. file-extension: yaml #nacos配置文件扩展名

二、多环境配置

可以配置多种环境
nacos在加载配置的时候,会自动加载
${spring.application.name}.${file-extenttion:properties}
配置项必须放在项目的bootstrap.properties文件中

  1. spring:
  2. profiles:
  3. active: dev

相当于读取nacos配置文件之中dataId为应用名+环境值
如:application-dev.yml application-dev.properties

附录: