背景
nacos配置文件每个服务都有一个,而且在开发环境下每个nacos配置文件需要保持一致,并且每个服务打包时各个nacos配置文件需要互相独立.
nacos配置文件在开发环境下经常修改,每次每个nacos配置文件都要改一遍,还容易出错冲突, 需要有一个文件统一管理nacos的命名空间和开发环境
使用一个文件统一管理
- 使用
spring.profiles.include
并利用SpringBoot加载顺序机制作nacos配置文件 结构如下
+----------------------------------+
| 开发根目录下: |
| bootstrap-framework.yml |
| (含spring.profiles.active, |
| spring.cloud.nacos.namespace) |
+----------------------------------+
|
|
↓
+------------------------------------+
| 服务内: | 由于SpringBoot的加载机制, 此文件在开发环境下相同字段会被上面的替代,不同的会和上面的互补
| bootstrap-framework.yml | !!但是在服务打包的时候生效
| (含spring.profiles.active, |
| spring.cloud.nacos.namespace) |
+------------------------------------+
|
|
↓
+-------------------------+
| 服务内: | 在此文件内使用`spring.profiles.include='framework'`
| bootstrap.yml | 统一引入`spring.profiles.active`和`spring.cloud.nacos.namespace`
+-------------------------+
注意
在开发环境下,在根目录下的bootstrap-frame.yml修改activate或namespace 会在所有服务都会生效
!! 但是,如果要将服务打包, 请在对应服务内的bootstrap-frame.yml文件修改activate或namespace, 此文件不会被打包进去
总结
利用Spring.profiles.include
可以将不同的服务配置整合, 同时它也遵守SpringBoot配置文件的加载机制,
利用这个机制我们可以统一管理开发环境下的配置文件
SpringBoot 配置文件加载机制
Spring Boot从以下位置加载配置: 优先级从高到低顺序,高优先级覆盖低优先级,如有不同内容,高优先级和低优先级形成互补配置
- 命令行参数
- 来自java:comp/env的JNDI属性
- java系统属性
(System.getProperties())
- 操作系统环境变量
- RandomValuePropertySource配置的
random.*
属性值 - jar包外部的
application-{profile}.properties
或者application.yml(带spring.profile)
配置文件 - jar包内部的
application-{profile}.properties
或者application.yml(带spring.profile)
配置文件 - jar包外部的
application.properties
或者application.yml(不带spring.profile)
配置文件 - jar包内部的
application.properties
或者application.yml(不带spring.profile)
配置文件 -
@Configuration
注解类上的@PropertySource
- 通过
SpringApplication.setDefaultProperties
指定的默认属性
网友评论