Nacos配置中心
# 1 Nacos配置
# 1.1 项目配置
在服务的pom文件中引入如下配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2
3
4
新建配置文件 bootstrap.yml
,新增spring.cloud.nacos.config段配置,将服务指向正确的nacos服务端。该配置文件中只保留nacos相关的配置即可,其他的配置放到nacos中统一管理。
spring:
application:
name: service-xxx
cloud:
nacos:
discovery:
server-addr: xxxx.xxx.xx.xx:8848 #服务注册地址
config:
server-addr: xxxx.xxx.xx.xx:8848 #服务配置地址
file-extension: yaml #nacos配置文件后缀,下文配置发布的时候会用到。注意是yaml,不是yml
group: XXX_GROUP #配置分组,默认分组是DEFAULT_GROUP
2
3
4
5
6
7
8
9
10
11
注意
上面这些属性必须配置在 bootstrap.yml或properties
文件中,而不是 application.yml
中,config配置内容才能被正确加载。
因为 bootstrap.yml
加载优先级高于 application.yml
,保证在应用一起动时就去加载配置,对于Spring一些自动装载类来说这很重要。
# 1.2 配置参数说明
Data Id : 该配置文件在nacos系统内的唯一标识。
# 在 Nacos Spring Cloud 中的完整格式如
${prefix}-${spring.profile.active}.${file-extension}
2
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来自定义配置。spring.profile.active
即为当前环境对应的 profile,如:service-xxx-dev.yaml中的dev就是指开发环境。
提示
当spring.profile.active
为空时,对应的环境定义字符将不存在,如:service-xxx.yaml
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。注意我们使用的是yaml
类型,不是yml
。虽然二者是一个意思,但是nacos只认yaml
。
Group:同
spring.cloud.nacos.config.group
配置,Group起到配置“隔离”的作用。
# 1.3 服务启动配置
启动服务的时候,加上-Dspring.profiles.active=dev
参数,这个参数是和DataId匹配的,如:
-Dspring.profiles.active=dev
会去找xxxxx-dev.yaml
配置文件。-Dspring.profiles.active=pro
会去找xxxxx-pro.yaml
配置文件。
# 启动服务并加载`aservice-rbac-dev.yaml`配置文件
java -jar service-xxx.jar -Dspring.profiles.active=dev
2
# 1.4 配置自动刷新
大部分配置管理中心, @Value
和 @ConfigurationProperties
都需要配合 @RefreshScope
注解才能实现动态刷新,但也有例外。
配置管理平台 | Value | ConfigurationProperties |
---|---|---|
nacos | 需要结合RefreshScope才能生效 | 需要结合RefreshScope才能生效 |
apollo | 不需要结合RefreshScope就能生效(例外) | 需要结合RefreshScope才能生效 |
spring cloud config | 需要结合RefreshScope才能生效 | 需要结合RefreshScope才能生效 |
结合springcloud ,@Value获取最新值要加
@RefreshScope
注解,配置文件中配置refresh: true
下面两个例子都可以将nacos配置 user.password
键对应的值热更新到 password
和 defaultPwd
对象上。这两个注解需要结合@RefreshScope
注解使用才能使配置动态更新生效。
@RefreshScope //这里需要加上RefreshScope注解
@ConfigurationProperties(prefix = "user")
public class User{
private String password;
}
2
3
4
5
@RefreshScope //这里需要加上RefreshScope注解
public class Test{
@Value("${user.password}")
private String defaultPwd;
}
2
3
4
5
# 1.5 配置中心隔离级别
隔离级别 | 举例一 | 举例二 |
---|---|---|
namespace(一级) | 一套部署环境一个namespace。 如:DEV开发环境;PRO生产环境 | 一个公司的一个部门建立一个namespace。 如:开发一部,开发二部 |
group(二级) | 一个微服务综合项目一个组 | 一个微服务综合项目一个组 |
dataid(三级) | 微服务配置文件xxxx.yaml、yyyy.yaml | 微服务配置文件xxxx-dev.yaml、xxxx-pro.yaml来区分部署环境 |
例:
spring:
cloud:
nacos:
##服务的注册
discovery:
server-addr: xxxx.xxx.xxx.xxx:8848
namespace: xxxxx
##服务配置中心
config:
server-addr: xxxx.xxx.xxx.xxx:8848
file-extension: yaml
namespace: xxxxxx
group: cloudwarehouse-eur-test
2
3
4
5
6
7
8
9
10
11
12
13
# 1.6 共享配置文件
例:
两份配置文件:
一份叫做common-datasource.yaml,放在DEFAULT_GROUP默认分组下,是数据库连接等配置,属于公有配置。
一份仍然叫做service-xxx-dev.yml,除去数据库连接外的其他的所有配置,属于子项目(服务)内部的个性化配置。
spring:
application:
name: service-xxx
cloud:
nacos:
discovery:
server-addr: xxxx.xxx.xxx.xxx:8848
config:
server-addr: xxxx.xxx.xxx.xxx:8848
extension-configs:
- data-id: service-xxx-dev.yaml
group: XXX_GROUP
refresh: true
- data-id: common-datasource.yaml
group: DEFAULT_GROUP
refresh: false
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
注意
nacos配置DataId需要将配置文件后缀加上(.yaml),否则会出现读取不到配置问题