global_config.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """全局配置聚合根 —— 唯一的配置入口,启动时一次创建、四处注入"""
  2. from pydantic import Field
  3. from pydantic_settings import BaseSettings, SettingsConfigDict
  4. from supply.config.database import (
  5. AigcDatabaseConfig,
  6. LongVideoDatabaseConfig,
  7. LongArticlesDatabaseConfig,
  8. PiaoquanCrawlerDatabaseConfig,
  9. GrowthDatabaseConfig,
  10. ContentDeconstructionSupplyConfig,
  11. )
  12. from supply.config.aliyun import AliyunLogConfig, AliyunOssConfig
  13. from supply.config.xxljob import XxlJobConfig
  14. class GlobalConfig(BaseSettings):
  15. """应用全局配置 —— 所有子配置的聚合根
  16. 启动时一次性创建,注入到各组件:
  17. global_config = GlobalConfig()
  18. db = DatabaseManager(create_backend("aigc", global_config.aigc_db))
  19. log_service = LogService(global_config.aliyun_log)
  20. executor = XxlJobExecutor(global_config.xxl_job)
  21. 每个子配置保持独立的 env_prefix,环境变量按各自前缀覆盖。
  22. """
  23. # ============ 应用基础配置 ============
  24. app_name: str = Field(
  25. default="long-articles-agentic-supply",
  26. description="应用名称,用于 XXL-JOB 执行器注册和日志标识",
  27. )
  28. environment: str = Field(
  29. default="development",
  30. description="运行环境: development / pre / production",
  31. )
  32. debug: bool = Field(default=False, description="调试模式")
  33. # ============ 数据库配置 ============
  34. aigc_db: AigcDatabaseConfig = Field(default_factory=AigcDatabaseConfig)
  35. long_video_db: LongVideoDatabaseConfig = Field(
  36. default_factory=LongVideoDatabaseConfig
  37. )
  38. long_articles_db: LongArticlesDatabaseConfig = Field(
  39. default_factory=LongArticlesDatabaseConfig
  40. )
  41. piaoquan_crawler_db: PiaoquanCrawlerDatabaseConfig = Field(
  42. default_factory=PiaoquanCrawlerDatabaseConfig
  43. )
  44. growth_db: GrowthDatabaseConfig = Field(default_factory=GrowthDatabaseConfig)
  45. content_decode_db: ContentDeconstructionSupplyConfig = Field(
  46. default_factory=ContentDeconstructionSupplyConfig
  47. )
  48. # ============ 阿里云服务配置 ============
  49. aliyun_log: AliyunLogConfig = Field(default_factory=AliyunLogConfig)
  50. aliyun_oss: AliyunOssConfig = Field(default_factory=AliyunOssConfig)
  51. # ============ XXL-JOB 配置 ============
  52. xxl_job: XxlJobConfig = Field(default_factory=XxlJobConfig)
  53. model_config = SettingsConfigDict(
  54. env_file=".env",
  55. env_file_encoding="utf-8",
  56. case_sensitive=False,
  57. extra="ignore",
  58. )
  59. # ============ 组合导出 ============
  60. def active_db_configs(self) -> dict[str, object]:
  61. """返回业务数据库配置映射 {name: config},供 DatabaseManager 使用"""
  62. return {
  63. "aigc": self.aigc_db,
  64. "long_articles": self.long_articles_db,
  65. "piaoquan_crawler": self.piaoquan_crawler_db,
  66. }