在Spring Cloud Alibaba + Nacos 中,配置优先级如下:
- nacos 配置中心{服务名}-{profile} 配置
- nacos 配置中心扩展配置(通过spring.cloud.nacos.config.extension-configs 指定)
- nacos 配置中心共享配置(通过 spring.cloud.nacos.config.shared-configs 指定)
- 运行jar包时 通过-D指定的参数,如 -Dknife4j.enable=false
- application-{profile}.properties
- application-{profile}.yml
- application-{profile}.yaml
- application.properties
- application.yml
- application.yaml
- bootstrap-{profile}.properties
- bootstrap-{profile}.yml
- bootstrap-{profile}.yaml
- bootstrap.properties
- bootstrap.yml
- bootstrap.yaml
注意 1:
yaml跟yml具有相同的作用,但是优先级也有区别,yml会覆盖yaml
properties(最高)> yml > yaml(最低)
注意 2:
Spring Cloud Alibaba Nacos Config目前提供了三种配置方式从 Nacos 配置中心获取配置信息
① 通过 spring.cloud.nacos.config.shared-configs支持多个共享 Data Id 的配置
② 通过 spring.cloud.nacos.config.extension-configs配置扩展 Data Id
③ 通过内部相关规则(服务名-环境.扩展名)自动生成相关的 Data Id 配置
三种方式的一个优先级关系是:③ > ② > ①(同一级别的配置数组下标越大,优先级越高;若未用数组下标的方式设置,则下标默认为书写顺序,顺序越靠后,下标越大,优先级越高)
使用下标书写时,若存在extension-configs[1]写在extension-configs[0]前面的情况,优先级仍然以下标为准,不以书写顺序为准;
但是需要注意的是不能写了extension-configs[1]而没有extension-configs[0],否则将启动失败
注意 3:
① shared-configs中若有重复的dataId,不会报错,仍然正常读取;
② extension-configs中若有重复的dataId,也不会报错,仍然正常读取;
③ 若shared-configs中的某个dataId与extension-configs中的某个dataId重复了,仍然不会报错,继续正常读取
注意 4:
1、spring.profiles.active只能设置在本地本地bootstrap或application中,写在nacos中是没有作用的
2、spring.profiles.active在本地的bootstrap和application两个文件中都设置了的话,以bootstrap为准(特殊)
3、若没有在本地bootstrap或application设置spring.profiles.active,则nacos只会监听{服务名}和{服务名}.文件后缀名
如下图:
通过内部相关规则(服务名-环境.扩展名)自动生成相关的 Data Id 配置,其服务名可通过spring.cloud.config.prefix修改,group也可通过spring.cloud.config.group修改
注意 5:
server.port可以在nacos中设置,而spring.cloud.active不行
但server.port仅在启动时生效,后续在nacos中进行修改是无效的,应用不会重新启动并更换端口