You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

3.9 KiB

kind name category scope source_files
configuration_system Spring Boot 配置体系与环境变量注入 configuration_system [**] [crm-app/src/main/resources/application.yml crm-auth/src/main/resources/application.yml crm-file/src/main/java/com/crm/file/config/FileProperties.java crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java]

本仓库采用 Spring Boot 标准的 YAML + @ConfigurationProperties 配置体系,通过多模块各自 application.yml 提供默认值,并以环境变量覆盖敏感参数,形成“默认配置 + 环境覆盖”的分层加载模式。

1. 使用的框架与工具

  • Spring Boot @ConfigurationProperties 类型安全绑定:所有业务配置均通过带 @Component 的 POJO 类声明前缀(如 crm.authcrm.filecrm.snowflakescheduled-task),由 Spring 自动装配。
  • YAML 配置文件:每个模块在 src/main/resources/application.yml 中定义完整配置结构,包括数据库、Redis、MyBatis-Plus、JWT、MinIO、kkFileView、定时任务等。
  • 环境变量占位符 ${ENV_VAR:default}:敏感信息(JWT secret、钉钉 Client ID/Secret、MinIO AK/SK)一律使用环境变量注入,默认值仅用于本地开发。

2. 核心文件与位置

  • crm-app/src/main/resources/application.yml:聚合应用入口配置,集中声明 MySQL、Redis、multipart 上传限制、crm.* 命名空间下的全部业务配置。
  • crm-auth/src/main/resources/application.yml:认证服务独立运行时的配置,端口 8081,包含 JWT、钉钉登录、雪花 ID 等。
  • crm-file/src/main/java/com/crm/file/config/FileProperties.java:文件模块配置类,定义 MinIO、预览、分片上传、黑名单等参数及默认值。
  • crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java:雪花 ID 生成器配置,要求多实例 worker-id/datacenter-id 互异。
  • crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java:定时任务属主控制,支持多实例下按 owner 限定执行节点。
  • crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java:认证模块配置,含 JWT 密钥、TTL、钉钉凭据及额外放行 URL 列表。

3. 架构与设计约定

  • 统一命名空间:所有业务配置集中在 crm.* 前缀下(auth、file、snowflake),跨模块共享;仅定时任务属主使用独立的 scheduled-task 前缀。
  • 分层默认值策略application.yml 提供可运行的默认值(如 localhost 数据库、默认 secret),生产环境通过环境变量覆盖,避免硬编码敏感信息。
  • 类型安全与单位约束:文件大小使用 DataSize(MB/GB)、超时使用 Duration(m/h),由 Spring Boot 自动校验与转换,避免字符串解析错误。
  • 配置联动约束:multipart 的 max-file-size / max-request-size 必须 ≥ crm.file.chunk-sizedirect-upload-limit 中的较大值,注释明确标注需同步调整。
  • 多实例部署约定:雪花 ID 的 worker-id 在多实例时必须互不相同;定时任务通过 scheduled-task.owner 指定唯一执行节点。

4. 约束与规则

  • 生产环境的 JWT secret、钉钉 Client Secret、MinIO AK/SK 必须通过环境变量注入,不得写入代码或配置文件(多处注释明确要求“生产环境务必用环境变量覆盖”)。
  • 分片上传的 chunk-size 不得低于 5MB(受 MinIO composeObject 非末片下限约束),且需与 multipart 上限联动调整。
  • 逻辑删除字段统一为 deleted,未删=0、已删=1,全局生效于 MyBatis-Plus 配置。
  • 驼峰映射 map-underscore-to-camel-case=true 在所有模块中保持一致。
  • 日志输出格式统一包含 %X{traceId} 追踪标识,便于链路追踪。