数据库管理器单例模式
This commit is contained in:
@@ -6,38 +6,53 @@ from typing import Optional
|
||||
|
||||
|
||||
class DBConnectionManager:
|
||||
"""数据库连接管理类,用于管理MySQL和Redis连接池"""
|
||||
"""数据库连接管理器,负责管理MySQL和Redis连接池"""
|
||||
|
||||
_instance = None
|
||||
|
||||
def __new__(cls, *args, **kwargs):
|
||||
@classmethod
|
||||
def get_instance(cls, mysql_config=None, redis_config=None):
|
||||
"""获取单例实例
|
||||
|
||||
Args:
|
||||
mysql_config: MySQL配置
|
||||
redis_config: Redis配置
|
||||
|
||||
Returns:
|
||||
DBConnectionManager实例
|
||||
"""
|
||||
if cls._instance is None:
|
||||
cls._instance = super(DBConnectionManager, cls).__new__(cls)
|
||||
cls._instance.initialized = False
|
||||
cls._instance = cls(mysql_config, redis_config)
|
||||
elif mysql_config or redis_config:
|
||||
# 如果已经有实例但又传入了配置,则更新配置
|
||||
if mysql_config and not cls._instance.mysql_pool:
|
||||
cls._instance.init_mysql_pool(mysql_config)
|
||||
if redis_config and not cls._instance.redis_pool:
|
||||
cls._instance.init_redis_pool(redis_config)
|
||||
return cls._instance
|
||||
|
||||
def __init__(self, mysql_config: Optional[dict] = None, redis_config: Optional[dict] = None):
|
||||
if self.initialized:
|
||||
def __init__(self, mysql_config=None, redis_config=None):
|
||||
"""初始化数据库连接管理器
|
||||
|
||||
Args:
|
||||
mysql_config: MySQL配置
|
||||
redis_config: Redis配置
|
||||
"""
|
||||
# 防止直接实例化
|
||||
if DBConnectionManager._instance is not None:
|
||||
return
|
||||
|
||||
self.LOG = logging.getLogger("DBConnectionManager")
|
||||
self.mysql_pool = None
|
||||
self.redis_pool = None
|
||||
|
||||
# 初始化MySQL连接池
|
||||
if mysql_config:
|
||||
self.mysql_pool = mysql.connector.pooling.MySQLConnectionPool(**mysql_config)
|
||||
self.LOG.info(f"MySQL连接池初始化完成: {mysql_config}")
|
||||
else:
|
||||
self.mysql_pool = None
|
||||
|
||||
self.init_mysql_pool(mysql_config)
|
||||
|
||||
# 初始化Redis连接池
|
||||
if redis_config:
|
||||
self.redis_pool = redis.ConnectionPool(**redis_config)
|
||||
self.LOG.info(f"Redis连接池初始化完成: {redis_config}")
|
||||
else:
|
||||
self.redis_pool = None
|
||||
self.init_redis_pool(redis_config)
|
||||
|
||||
self.initialized = True
|
||||
|
||||
def get_mysql_connection(self):
|
||||
"""获取MySQL连接"""
|
||||
if not self.mysql_pool:
|
||||
|
||||
Reference in New Issue
Block a user