"""应用生命周期管理""" from contextlib import asynccontextmanager from fastapi import FastAPI from core.db import init_db from core.config import settings as app_settings from core.log import logger from api.deps import create_scheduler_service @asynccontextmanager async def lifespan(app: FastAPI): """应用启动和关闭时的生命周期管理""" # 初始化数据库 await init_db() # 创建调度器并挂载到 app.state scheduler_service = create_scheduler_service() app.state.scheduler_service = scheduler_service app.state.validation_queue = scheduler_service.validation_queue # 加载设置并决定是否启动调度器 from services.settings_service import SettingsService settings_service = SettingsService() try: settings = await settings_service.get_settings() scheduler_service.interval_minutes = settings.get( "validate_interval_minutes", app_settings.validator_timeout ) if settings.get("auto_validate", True): await scheduler_service.start() except Exception as e: logger.error(f"Failed to load settings on startup: {e}") logger.info("API server started") yield # 关闭调度器 await scheduler_service.stop() logger.info("API server shutdown")