本系列前面講解了Spring的bean定義、bean實例化、bean初始化等生命周期階段。這些步驟使我們能夠瞭解bean從創建到準備好使用所經歷的過程。但是,除了這些步驟,bean的銷毀也是非常重要的一步。在本系列的最後,我們將深入探討bean的銷毀過程,包括在什麼情況下會發生銷毀、銷毀的順序以及如... ...
使用python flask框架 flask_sqlalchemy 時出現了 Lost connection to MySQL server during query Mysql主機連接超時的問題
由於Mysql會定時處理長時間未連接使用的連接池 具體時長可通過 查看
show variables like '%timeout%'
wait_timeout 為超時時長,這裡的時間時 120秒
再超過120秒時會導致 Lost connection to MySQL server during query Mysql主機連接超時 錯誤
在通過網上翻閱具體解決方案發現答案有了滯後性,舊版本中可以通過配置
SQLALCHEMY_POOL_RECYCLE = 120 #多少秒後自動回收連接。這對 MySQL 是必要的, 它預設移除閑置多於 8 小時的連接。註意如果 使用了 MySQL , Flask-SQLALchemy 自動設定 這個值為 2 小時。
來進行自動回收連接的配置。
在查看源碼後發現新版本已經移除了 SQLALCHEMY_POOL_RECYCLE 的配置項
採用
SQLALCHEMY_ENGINE_OPTIONS = { "pool_recycle" : 120 #自動回收連接的秒數 }
這種方式進行配置自動連接回收配置。
具體配置操作代碼如下
main.py
app = Flask(__name__) #引入資料庫配置 app.config.from_object(Config) #註冊資料庫 init_db(app) if __name__ == "__main__": app.run(debug=True,port=5000,host="0.0.0.0")
init_db.py
from flask import Flask from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def init_db(app:Flask): db.init_app(app)
config.py
class Config: DEBUG = True HOST = "127.0.0.1" PORT = 5200 #資料庫配置 MYSQL_USERNAME = "root" MYSQL_PASSWORD = "" MYSQL_HOST = "127.0.0.1" MYSQL_PORT = 3306 MYSQL_DATABASE = "" #mysql 資料庫的配置信息 SQLALCHEMY_ECHO = True #如果設置成 True,SQLAlchemy 將會記錄所有 發到標準輸出(stderr)的語句,這對調試很有幫助。 SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4" SQLALCHEMY_ENGINE_OPTIONS = { "pool_recycle" : 120 #自動回收連接的秒數 }