六、配置内部与外部的加载顺序
应用配置的加载主要分了五个层级,其加载规则为:
- 越静态的越前面
- 越动态的越后面(以配置键为单位,后面加载的会盖掉前面加载的)
具体顺序为:
(L1)内部资源配置文件
是指会与代码一起打包到的资源配置文件,打包后,没法修改。所以也需要“外部配置文件”和“动态配置”加以补充。
- 应用属性配置
即内部的 "app.yml"、"app.properties"。
- 应用环境属性配置
即内部带环境标记的 "app-xxx.yml"、"app-xxx.properties"(如:"app-dev.yml","app-pro.yml")。
- 通过 "solon.config.load" 添加的内部资源配置文件
solon.config.load:
- "classpath:${solon.env}/jdbc.yml"
- "classpath:${solon.env}/*.yml" #v2.7.6 后支持 * 表达式
- "classpath:common/*.yml" #v2.7.6 后支持 * 表达式
- "classpath:docs.yml"
(L2)外部本地配置文件
- 通过 “solon.config.add” 添加的外部配置文件
solon.config.add: "./app.yml" #会加载 jar 边上的 app.yml 配置文件(多个用","隔开)
或者在启动时指定:
java -jar demo.jar --solon.config.add=./app.yml
java -Dsolon.config.add=./app.yml -jar demo.jar
(L3)动态配置
- 启动参数
java -jar demo.jar -debug=1
- 系统属性
java -Dsolon.config.add=./app.yml -jar demo.jar
- 环境变量(比如编排容器时)
services:
demoapi:
image: demo/demoapi:1.0.0
container_name: demoapi
environment:
- solon.stop.safe=1
- TZ=Asia/Shanghai
ports:
- 8080:8080
"solon" 开头的环境变量,会被框架同步到系统属性(System::getProperties)与应用属性(Solon::cfg)。
(L4)启动初始化时接口加载的配置
- 加载配置文件
Solon.start(App.class, args, app->{
app.cfg().loadAdd("demo.yml");
});
- 加载环境变量(打包 docker 镜像时,非常方便)
Solon.start(App.class, args, app->{
//通过前缀加载环境变量
app.cfg().loadEnv("demo.");
});
(L5)云端配置(Solon Cloud Config)
- 以 nacos-solon-cloud-plugin 为例:
solon.cloud.nacos:
config:
load: "jdbc.yml,auth.yml"