遇到一個問題,線下環境測試數據的查詢完全沒有問題,但是線上環境卻沒法查詢出數據,並且從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服務器設置的時區信息
不過如果沒有設置,就可能出現不同的環境,產生這種不易發現的問題。