仓库采用 Spring Boot 3.5 的原生配置机制:以 application.yaml 为默认配置,按 spring.profiles.active=dev|pro 加载 application-dev.yaml / application-pro.yaml 进行覆盖;业务域配置通过 @ConfigurationProperties(prefix = "...") 绑定到独立 POJO(EmbeddingProperties、GatewayProperties、InsightProperties、AiCleanVectorProperties、EtlProperties、ChatAttachmentProperties、ArtifactProperties、DuckdbBudgetProperties、KnowledgeProperties 等),零散开关则用 @Value。两个子模块各自维护独立的配置文件集合,无共享的公共配置中心。
src/main/resources/application.yaml — 默认配置入口,定义 server.*、spring.*、zsjz.*(insight/duckdb/file-ai/embedding/ai-clean/electl)、mybatis-plus.* 等核心段。application-dev.yaml / application-pro.yaml — 分别覆盖数据库连接(PostgreSQL + pgvector)、Redis、Elasticsearch、storage.local.*、sa-token.*、Neo4j、以及 zsjz.embedding.enabled/model-path 等环境差异项。common/config/CorsConfig.java — 基于 @ConditionalOnProperty("app.cors.enabled") 与 @Value("${app.cors.allowed-origin-patterns:*}") 动态注册全局 CORS Filter。module/*/config/*Properties.java — 领域级配置 POJO。src/main/resources/application.yaml — 网关基础配置(Spring Cloud Gateway、Sa-Token、gateway.admin/health-check/cors/services)。application-dev.yaml / application-pro.yaml — 仅覆盖 PostgreSQL 与 Redis 连接,生产版使用 ${PG_URL} / ${PG_USER} / ${PG_PASSWORD} / ${REDIS_HOST} / ${REDIS_PASSWORD} 环境变量注入。config/GatewayProperties.java — gateway.* 类型安全映射。spring.profiles.active=dev 是默认值;开发用内网地址(192.168.0.x),生产用 localhost 或环境变量。两套 YAML 结构完全对齐,便于新增 profile 时对照。zsjz.embedding、gateway.services[*].nodes[*] 等)统一用 Lombok @Data + @ConfigurationProperties 绑定 POJO,避免散落多处 @Value。application.yaml 中显式注释“Sa-Token 配置必须与 ai-server 的 application.yaml 逐项一致”,因为网关只读 Redis 中的 token->loginId,键名由配置拼接;application-dev.yaml 也注释“与 ai-server 的同库同 Redis”。${...} 占位符注入,YAML 中仅保留默认回退值。zsjz.* 命名空间:insight、duckdb、file-ai、embedding、ai-clean/vector、chat-attachment、etl.rag 等能力均作为 zsjz 下的子树,便于统一启停。CorsConfig 使用 @ConditionalOnProperty(name = "app.cors.enabled", havingValue = "true", matchIfMissing = true),并允许 app.cors.allowed-origin-patterns 通配收敛到具体来源。spring.sql.init.mode=always + schema-locations: classpath:db/gateway.sql 在每次启动执行幂等建表;服务侧 MyBatis-Plus 禁用二级缓存,mapper XML 走 classpath*:mappers/**/*.xml。gateway.services 仅在 gateway_service 表为空时播种,之后由 /gateway/admin/** 管理,YAML 不再覆盖。src/main/resources/application.yaml,环境变体命名为 application-{profile}.yaml,并通过 spring.profiles.active 激活(来源:两模块的 application.yaml 顶部)。spring.application.name 明确区分两个服务(ai-server / ai-gateway),用于 Spring 上下文标识(来源:两模块 application.yaml)。token-name、timeout、active-timeout、is-concurrent、replaced-range 等字段在 ai-server 与 ai-gateway 的配置中保持逐项一致(来源:两模块 application.yaml 及 dev/pro 文件的注释说明)。${PG_URL}、${PG_USER}、${PG_PASSWORD}、${REDIS_HOST}、${REDIS_PASSWORD} 环境变量注入,YAML 仅提供默认值(来源:ai-gateway/src/main/resources/application-pro.yaml)。strict=true,写错 @DS key 直接报错而非静默回退主库(来源:application-dev.yaml 中文注释)。module/<domain>/config/<Domain>Properties.java,对应 application.yaml 中 zsjz.<domain> 或模块自管前缀(如 gateway.*、storage.*、neo4j.*)。@ConditionalOnProperty 控制装配(如 CORS Filter 默认 matchIfMissing = true 开启)。storage.local.root-path=./data/files,对外访问基址 storage.local.base-url 需与 server.port + context-path 保持一致(来源:两处 YAML 注释)。Electron 应用另有独立的桌面端配置:electron/config/{config.default,config.local,config.prod}.ts 与窗口选项 windowOptions.ts,以及用户级 data/codex-home/config.toml、local-settings.json,与 Java 后端的 Spring Boot 配置体系相互独立。