diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index 85759f96..f700c016 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -1,10 +1,28 @@ from sqlalchemy import (Connection, CursorResult, Engine, QueuePool, - create_engine, text) + create_engine, event, exc, text) from sqlalchemy.engine.url import URL +from sqlalchemy.pool import Pool from src.error.exceptions import DBException +from src.logging.get_logger import get_logger from src.system_var import environment +logger = get_logger('DB接続') + + +@event.listens_for(Pool, 'checkout') +def ping_connection(dbapi_connection, connection_record, connection_proxy): + """コネクションが切れた場合、再接続""" + cursor = dbapi_connection.cursor() + try: + cursor.execute("SELECT 1") + except Exception as e: + logger.info(f'DB接続に失敗したため、リトライします: {e}') + # raise DisconnectionError - pool will try + # connecting again up to three times before raising. + raise exc.DisconnectionError() + cursor.close() + class Database: """データベース操作クラス"""