Math.abs("XXX".hashCode())引發的分表錯誤問題

最近,新開發了一套應用系統,由於業務量的需要,使用了分庫分表,自定義了分庫分表算法,大致思路是根據請求號,經base64轉換,去hashCode,然後將該hashCode對庫表個數取模,算出相應的庫和表。但昨天告警系統受到一跳通知,有數據入庫失敗,看了下日誌,顯示錶後綴居然是“-048”,正常的表後綴都是“00X”或者“0XX”,即從000到099,明顯表後綴錯誤。
初步懷疑是併發問題導致,研究了半天代碼發現取路由碼這塊不存在併發問題的代碼,也不存在拼接的問題(如果是拼接問題,會出現大量的單子有這種問題,但此單就出現了1次)。
看了半天還是沒思路,怎麼辦,拿着單號debug一下,debug時,果然發現問題,Math.abs(“XXX”.hashCode())居然出現了負值,“-048”簽名的“-”居然是個負號,原來"XXX".hashCode()的值居然是-2147483648

在這裏插入圖片描述
在這裏插入圖片描述

很明顯,數值越界。

後邊不用這個Math.abs了,將hashCode改爲long類型,自己取絕對值,路由算法無改動,對已入庫的單子路由也無影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章