遇到一個問題,線下環境測試數據的查詢完全沒有問題,但是線上環境卻沒法查詢出數據,並且從mybatis輸出的日志來看,查詢參數也沒有問題,數據庫中數據也是存在的,查詢參數類型是java.util.Date。
而且mybatis還很迷的輸出了這么一句Total: 1 ,這行日志是在對mybatis開啟DEBUG才會輸出的
於是,想破了頭,一心想着是不是mybatis在查詢結果后,從查詢結果集到實體類的映射出了什么問題?
但是又很懷疑,因為並沒有任何異常拋出來
期間想到要不用下BTrace,后來還是決定把mybatis源碼過一遍看看,畢竟,即便使用BTrace,也要知道從哪里入手來排查
吭呲吭呲的啃了一天多,mybatis太缺少注釋,看起來是真的難
找到了沒有查到結果但是日志又輸出
Total: 1的原因,給mybatis提了個Issue
最后發現從代碼看不出問題(主要還是不精)
最后還是指望BTrace這些玩意了
然后看到說阿里的Arthas比較好用些,最后就用了下,挺不錯的
然后最后跟蹤的結果就是,實際查詢時使用的時間和我程序計算的時間不一樣,小了十三個小時,我就猜到可能是這個原因了
最后給JdbcURL加上了serverTimezone=Aisa/Shanghai,問題解決了
這里要說的是,如果你使用的MySQL JDBC Driver版本在8.0及以上,一定要設置這個
一般來說,如果MySQL服務器設置了時區信息,應該是沒問題的
show variables like '%time_zone%'; 這樣來查看MySQL服務器設置的時區信息
不過如果沒有設置,就可能出現不同的環境,產生這種不易發現的問題。
