Solon v3.0.3

六、配置内部与外部的加载顺序

</> markdown

应用配置的加载主要分了五个层级,其加载规则为:

  • 越静态的越前面
  • 越动态的越后面(以配置键为单位,后面加载的会盖掉前面加载的)

具体顺序为:

(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)

solon.cloud.nacos:
  config:
    load: "jdbc.yml,auth.yml"