first commit
This commit is contained in:
122
main.py
Normal file
122
main.py
Normal file
@@ -0,0 +1,122 @@
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.responses import JSONResponse
|
||||
import uvicorn
|
||||
import logging
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
# 导入路由模块
|
||||
from api.v1.routes.database import router as database_router
|
||||
from api.v1.routes.tables import router as tables_router
|
||||
from database_manager import db_manager
|
||||
from sample_data import SampleDataInitializer
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# 应用生命周期管理
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
"""应用启动和关闭时的处理"""
|
||||
# 启动时
|
||||
logger.info("数据库接口服务启动中...")
|
||||
|
||||
# 初始化示例数据
|
||||
try:
|
||||
logger.info("开始初始化示例数据...")
|
||||
sample_initializer = SampleDataInitializer()
|
||||
sample_initializer.initialize_all_sample_data()
|
||||
logger.info("示例数据初始化完成")
|
||||
except Exception as e:
|
||||
logger.warning(f"示例数据初始化失败: {str(e)}")
|
||||
logger.info("服务将继续启动,但示例数据不可用")
|
||||
|
||||
yield
|
||||
# 关闭时
|
||||
logger.info("数据库接口服务关闭中...")
|
||||
# 关闭所有数据库连接
|
||||
for connection_id in db_manager.list_connections():
|
||||
db_manager.close_connection(connection_id)
|
||||
logger.info("所有数据库连接已关闭")
|
||||
|
||||
# 创建FastAPI应用
|
||||
app = FastAPI(
|
||||
title="数据库接口服务",
|
||||
description="提供统一的数据库管理接口,支持MySQL、Oracle、SQL Server、PostgreSQL等多种数据库类型",
|
||||
version="1.0.0",
|
||||
docs_url="/docs",
|
||||
redoc_url="/redoc",
|
||||
lifespan=lifespan
|
||||
)
|
||||
|
||||
# 添加CORS中间件
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"], # 在生产环境中应该设置具体的域名
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# 全局异常处理
|
||||
@app.exception_handler(Exception)
|
||||
async def global_exception_handler(request, exc):
|
||||
"""全局异常处理器"""
|
||||
logger.error(f"全局异常: {str(exc)}")
|
||||
return JSONResponse(
|
||||
status_code=500,
|
||||
content={
|
||||
"success": False,
|
||||
"message": "服务器内部错误",
|
||||
"error": str(exc)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
# 健康检查接口
|
||||
@app.get("/health", tags=["系统"])
|
||||
async def health_check():
|
||||
"""健康检查接口"""
|
||||
return {
|
||||
"success": True,
|
||||
"message": "服务运行正常",
|
||||
"data": {
|
||||
"status": "healthy",
|
||||
"active_connections": len(db_manager.list_connections())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# 根路径接口
|
||||
@app.get("/", tags=["系统"])
|
||||
async def root():
|
||||
"""根路径接口"""
|
||||
return {
|
||||
"success": True,
|
||||
"message": "欢迎使用数据库接口服务",
|
||||
"data": {
|
||||
"title": "数据库接口服务",
|
||||
"version": "1.0.0",
|
||||
"description": "提供统一的数据库管理接口,支持MySQL、Oracle、SQL Server、PostgreSQL等多种数据库类型",
|
||||
"docs_url": "/docs",
|
||||
"redoc_url": "/redoc"
|
||||
}
|
||||
}
|
||||
|
||||
# 注册路由
|
||||
app.include_router(database_router, prefix="/api/v1", tags=["数据库管理"])
|
||||
app.include_router(tables_router, prefix="/api/v1", tags=["表管理"])
|
||||
|
||||
# 主函数
|
||||
if __name__ == "__main__":
|
||||
logger.info("启动数据库接口服务...")
|
||||
uvicorn.run(
|
||||
"main:app",
|
||||
host="0.0.0.0",
|
||||
port=8000,
|
||||
log_level="info"
|
||||
)
|
||||
Reference in New Issue
Block a user