feat: 优化连接相关配置
This commit is contained in:
+22
-22
@@ -1,36 +1,36 @@
|
||||
import asyncio
|
||||
import sys
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import Annotated, AsyncContextManager
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi.params import Depends
|
||||
from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
|
||||
from sqlalchemy import AsyncAdaptedQueuePool, text
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from app.config.env import env
|
||||
from sqlmodel import create_engine
|
||||
|
||||
DATABASE_URL = f"mysql+asyncmy://{env.db_username}:{env.db_password}@{env.db_host}:{env.db_port}/{env.db_database}?charset=utf8mb4"
|
||||
|
||||
# 创建异步引擎实例,用于异步操作数据库
|
||||
async_engine = AsyncEngine(create_engine(
|
||||
# 建议直接使用这个函数,不要嵌套 create_engine(AsyncAdaptedQueuePool)
|
||||
async_engine = create_async_engine(
|
||||
DATABASE_URL,
|
||||
poolclass=AsyncAdaptedQueuePool, # 使用异步适配的队列池
|
||||
pool_size=5, # 连接池保持的连接数
|
||||
max_overflow=10, # 允许超过pool_size的最大连接数
|
||||
pool_timeout=30, # 获取连接的超时时间(秒)
|
||||
pool_recycle=180, # 连接回收时间(秒)
|
||||
pool_pre_ping=True, # 启用连接有效性检测
|
||||
echo=True, # 启用SQL语句日志输出,便于开发调试
|
||||
future=True, # 启用SQLAlchemy 2.0风格的未来模式API
|
||||
))
|
||||
# 连接池保持的连接数
|
||||
pool_size=5,
|
||||
# 允许超过pool_size的最大连接数
|
||||
max_overflow=10,
|
||||
# 获取连接的超时时间(秒)
|
||||
pool_timeout=30,
|
||||
# 连接回收时间(秒)
|
||||
pool_recycle=60, # 针对 Docker NAT 环境优化
|
||||
# 启用连接有效性检测
|
||||
pool_pre_ping=True, # 解决 Lost connection 的核心
|
||||
# 启用SQL语句日志输出,便于开发调试
|
||||
echo=True,
|
||||
# 启用SQLAlchemy 2.0风格的未来模式API
|
||||
future=True,
|
||||
)
|
||||
|
||||
# 创建一个会话工厂函数
|
||||
# 使用这个 Session 工厂
|
||||
async_session = sessionmaker(
|
||||
bind=async_engine,
|
||||
async_engine,
|
||||
class_=AsyncSession,
|
||||
expire_on_commit=False
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user