fix: MySQL 连���池添加重试逻辑
- 最多重试 30 次,每次间隔 2 秒 - 解决 MySQL 容器启动慢导致的连接失败问题 - 添加 import time 模块 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from datetime import date, time, datetime, timedelta
|
from datetime import date, time, datetime, timedelta
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
@@ -28,16 +29,33 @@ def get_mysql_config() -> dict:
|
|||||||
|
|
||||||
|
|
||||||
def init_connection_pool():
|
def init_connection_pool():
|
||||||
"""初始化数据库连接池"""
|
"""初始化数据库连接池(带重试)"""
|
||||||
global _connection_pool
|
global _connection_pool
|
||||||
if _connection_pool is None:
|
if _connection_pool is None:
|
||||||
config = get_mysql_config()
|
config = get_mysql_config()
|
||||||
_connection_pool = pooling.MySQLConnectionPool(
|
max_retries = 30
|
||||||
pool_name="vitals_pool",
|
retry_delay = 2
|
||||||
pool_size=5,
|
|
||||||
pool_reset_session=True,
|
for attempt in range(max_retries):
|
||||||
**config
|
try:
|
||||||
)
|
_connection_pool = pooling.MySQLConnectionPool(
|
||||||
|
pool_name="vitals_pool",
|
||||||
|
pool_size=5,
|
||||||
|
pool_reset_session=True,
|
||||||
|
**config
|
||||||
|
)
|
||||||
|
# 测试连接
|
||||||
|
conn = _connection_pool.get_connection()
|
||||||
|
conn.close()
|
||||||
|
print(f"[Vitals] MySQL 连接池初始化成功")
|
||||||
|
return _connection_pool
|
||||||
|
except Exception as e:
|
||||||
|
if attempt < max_retries - 1:
|
||||||
|
print(f"[Vitals] MySQL 连接失败,{retry_delay}秒后重试... ({attempt + 1}/{max_retries}): {e}")
|
||||||
|
time.sleep(retry_delay)
|
||||||
|
else:
|
||||||
|
print(f"[Vitals] MySQL 连接失败,已重试 {max_retries} 次")
|
||||||
|
raise
|
||||||
return _connection_pool
|
return _connection_pool
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user