今天同事給我看一段代碼,是我前年寫的。
他發現了一個bug。
代碼的作用是用jdbc向mysql中插入一條主鍵自增的數據,然后使用mysql的select last_insert_id()語法獲取生成的主鍵值。
問題出在兩次sql執行用的不是同一個數據庫連接,而從數據源里獲取了兩次
我們都知道,mysql的last_insert_id()函數是針對connection的,所以這是個嚴重bug。
之前兩年負載小,所以數據源大概每次都返回同一個connection,于是bug被遮蓋住了。最近服務器壓力增加,兩次連接就可能不是同一個了。
因此last_insert_id()得到的主鍵值出錯!

那時候我怎么會獲取兩次連接來執行一個方法里的兩句sql,包括我在內所有人都莫名其妙。錯誤比較明顯,這項目已經交接給他們了,不過出于對我的信任,還是屁顛屁顛來問我:獲取兩個連接是不是還有其他特殊考慮?我苦思冥想了一會,答曰:忘了。

沒想到我曾經養過的臭蟲還到處潛伏著,等著我出丑呢。