今天同事给我看一段代码,是我前年写的。
他发现了一个bug。
代码的作用是用jdbc向mysql中插入一条主键自增的数据,然后使用mysql的select last_insert_id()语法获取生成的主键值。
问题出在两次sql执行用的不是同一个数据库连接,而从数据源里获取了两次
我们都知道,mysql的last_insert_id()函数是针对connection的,所以这是个严重bug。
之前两年负载小,所以数据源大概每次都返回同一个connection,于是bug被遮盖住了。最近服务器压力增加,两次连接就可能不是同一个了。
因此last_insert_id()得到的主键值出错!

那时候我怎么会获取两次连接来执行一个方法里的两句sql,包括我在内所有人都莫名其妙。错误比较明显,这项目已经交接给他们了,不过出于对我的信任,还是屁颠屁颠来问我:获取两个连接是不是还有其他特殊考虑?我苦思冥想了一会,答曰:忘了。

没想到我曾经养过的臭虫还到处潜伏着,等着我出丑呢。