mysql 空閒事務 mysql的空閒8小時問題

2021-10-17 22:20:41 字數 709 閱讀 6250

在spring中配置資料來源時,必須設定destroy-method=」close」屬性,以便spring容器關閉時,資料來源能正常關閉。

如果資料庫時mysql,如果資料來源配置不當,則可能發生經典的「8小時問題」。原因是mysql在預設情況下如果發現乙個連線的空閒時間超過8小時,會在資料庫端自動關閉這個連線。而資料來源不知道這個連線已經被資料庫關閉,當他將這個「空閒」的連線交給dao時,dao就會報無法獲取connection的異常。

如果採用dbcp預設配置,testonborrow屬性預設值為true,資料來源在將連線交給dao前,會檢測這個連線是否是正常的,如果有問題,會再取乙個連線,所以不會有8小時問題。如果每次在交給dao時都檢測連線的有效性,則會再高併發時造成效能問題,因為這造成了更多的資料庫訪問請求。

另一種方式是:將testonborrow設定為false,而將testwhileidle設定為true,再設定timebetweenevictionrunsmillis值。這樣,dbcp會通過乙個後台執行緒定時對空閒連線進行檢測,當發現無用的空閒連線時,會將他們清除掉。只要將timebetweenevictionrunsmillis設定為小於8小時,那些被mysql關閉的空閒連線就可以被清除出去,從而避免「8小時問題」。

也可以設定mysql本身的interactive-timeout配置引數,更改空閒連線過期時間。在設定timebetweenevictionrunsmillis時,需要知道mysql的空閒連線最大過期時間

mysql 事務 數量 Mysql 事務

什麼是事務 不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback 每條 sql 語句都是乙個事務 只對 dml 生效 caid 一致性 consistency 讓資料保持一定程度的合理性,比如使用者加入購物車,購物...

mysql事務操作 mysql的事務操作

倒著思考。杜絕純粹的知識填鴨教育 少廢話,是上 update table1 set money 100 where id 1 a賬戶減少100元 update table2 set money 100 where id 2 b 賬戶增加100元 問題 這是乙個簡單的銀行轉賬案例sql,由於伺服器等未...

mysql事務的用途 MySQL事務功能

mysql事務功能 1.事務簡述 乙個事務是乙個連續的一組資料庫操作,就好像它是乙個單一的工作單元進行。換言之,永遠不會是完整的事務,除非該組內的每個單獨的操作是成功的。如果在事務的任何操作失敗,則整個事務將失敗。2.事務特性 原子性 在事務的操縱中,要麼都執行 要麼都不執行 一致性 事務中,保證資...