# 配置文件与多环境

from yuanboot import ConfigurationBuilder

config = (
    ConfigurationBuilder(".")
    .add_defaults({"greeting": {"message": "hello"}})
    .add_yaml_file("config")
    .add_environment()
    .add_flag_args()  # 显式启用,避免干扰宿主/测试的参数
    .build()
)

优先级:默认值 < config.yml < config_<profile>.yml < 远程配置(Nacos/Apollo/自定义源)< 环境变量 < CLI。 profile 默认 dev,通过 build(profile="pro")、YUANBOOT_PROFILE 或 --profile 选择;profile 文件与基础文件递归合并。 环境名统一为 dev / fat / uat / pro,其他值会在启动前报错。模板包含这四个环境的配置文件。 MySQL、Redis、Nacos 等基础设施由配置决定,不能使用 cloud 作为环境名。 支持 JSON、可选文件、${ENV:default} 插值、点路径查询和 Pydantic 模型绑定。

yuanboot:
  application:
    name: demo
    server:
      address: ":8080"
      # 也可使用 host/port(不要同时设置 address)
      # tls:
      #   cert: ./cert.pem
      #   key: ./key.pem
database:
  url: "${DATABASE_URL:sqlite:///demo.db}"

YUANBOOT_DATABASE__URL 对应 database.url;双下划线表示层级。 完整框架键以 YUANBOOT_YUANBOOT__APPLICATION__NAME 覆盖,常用名称和端口有短写 YUANBOOT_APP、YUANBOOT_PORT。 配置值可通过 get_string/get_int/get_bool/get_section 读取;config.bind(MySettings, "database") 校验为 Pydantic 模型。 缺失必需文件、未提供默认值的环境插值及错误配置会立即报错。 显式启用 flag 解析时支持 --app --port --profile --conf -f,忽略其他工具的参数。 模板默认从当前项目目录读取配置,运行已打包项目时也应提供外部配置文件。

# 配置文件布局

config.yml
config_dev.yml
config_fat.yml
config_uat.yml
config_pro.yml

基础配置放在 config.yml,各环境仅覆盖有差异的字段。 启动命令在项目目录执行,使配置文件与 CLI 的工作目录一致:

yuanbootctl-python run --profile dev
yuanbootctl-python run --profile fat
yuanbootctl-python run --profile uat
yuanbootctl-python run --profile pro

也可设置 YUANBOOT_PROFILE=pro;显式 --profile 优先于环境变量。 YUANBOOT_PORT=9000 覆盖监听端口。

# 配置读取与模型绑定

from pydantic import BaseModel


class DatabaseSettings(BaseModel):
    url: str


message = config.get_string("greeting.message", "Hello")
port = config.get_int("yuanboot.application.server.port", 8080)
database = config.bind(DatabaseSettings, "database")

使用环境变量插值把部署环境中的连接信息传给应用:

database:
  url: "${DATABASE_URL:sqlite:///orders.db}"

Nacos、Apollo 与热更新的接入方法见组件配置与使用。