Nacos不仅可以作为注册中心,还可以作为管理中心
我们可以将程序的配置进行统一管理
传统项目处理配置的问题
没有「配置中心」的传统项目中,我们是怎么处理各类配置参数问题的:
1. 静态化配置
大多数在项目配置写在例如 application.propertie或者application.yml中,
然后将各类 参数配置、应用配置、环境配置、安全配置、业务配置 都写到这个文件里。
当项目代码逻辑中需要使用配置的时候,就从这个配置文件中读取。
这种做法虽然简单,但如果参数需要修改,就非常的不灵活,甚至需要重启运行中的项目才能生效。
2. 配置文件无法区分环境。
由于配置文件是放在项目中的,但是我们项目可能会有多个环境,
例如:测试环境、预发布环境、生产环境。
每一个环境所使用的配置参数理论上都是不同的,
所以我们在配置文件中根据不同环境配置不同的参数,这些都是手动维护,
在项目发布的时候,极其容易因开发人员的失误导致出错。
3. 配置文件过于分散
如果一个项目中存在多个逻辑模块独立部署,每个模块所使用的配置内容又不相同,
传统的做法是会在每一个模块中都放一个配置文件,甚至不同模块的配置文件格式还不一样。
那么长期的结果就是配置文件过于分散混乱,难以管理。
4. 配置修改无法追溯
因为采用的静态配置文件方式,所以当配置进行修改之后,不容易形成记录,更无法追溯是谁修改的、修改时间是什么、修改前是什么内容。
既然无法追溯,那么当配置出错时,更没办法回滚配置了。
一、配置中心
Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。
使用Spring Cloud Alibaba Nacos Config,就可以在Nacos Server集中管理Spring Cloud应用的外部属性配置
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 新建配置
DataId设置为应用名+配置文件的格式
如:application.yml application.properties(默认为properties格式,可省略扩展名)
需要保证应用的GROUPID和新建应用配置中设置的GROUPID一致
即: spring.cloud.nacos.config.group=DEV_GROUP
将程序中的配置信息进行统一管理
只需要在程序中添加配置相关依赖即可
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
SpringCloud bootstrap.properties文件的读取优先于application.properties
所有关于SpringCloud的配置要写在bootstrap.properties文件中
nacos配置修改之后不需要重启客户端,会自动刷新
注意,nacos配置中心的配置格式默认为properties格式,要想要使用其他格式,就需要在程序配置文件之中配置
spring:
application:
name: nacos-discovery-provider
cloud:
nacos:
config:
file-extension: yaml #nacos配置文件扩展名
二、多环境配置
可以配置多种环境
nacos在加载配置的时候,会自动加载
${spring.application.name}.${file-extenttion:properties}
配置项必须放在项目的bootstrap.properties文件中
spring:
profiles:
active: dev
相当于读取nacos配置文件之中dataId为应用名+环境值
如:application-dev.yml application-dev.properties