目錄
- 現象
- 解決
- 程序
- 結論
現象
- 系統根據指定的日期范圍(LocalDateTime)查詢資料庫,結果與直接將SQL陳述句查詢不一致,系統查詢的并不是期望日期范圍的資料,
- 通過 LocalDateTime、LocaDate、LocalDate 作為時間插入資料時,時間不對
解決
更換 mysql 的驅動包版本在 8.0.22及以上
官網bug說明:https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-22.html

注意:考慮到規范問題,8.0.31的時候驅動包的坐標調整了!!!
| 8.0.31 之前maven坐標 | 8.0.31 及以后maven坐標 |
|---|---|
| groupId: mysql artifactId: mysql-connector-java |
groupId: com.mysql artifactId: mysql-connector-j |
程序
-
上線之后,通過定時任務生成的報表資料有很明顯的例外,用戶報故
-
在本地環境進行 debug 時,發現查詢出來的結果串列和期望值不一樣

-
開啟了 mybatis 的sql日志列印,將日志列印在控制臺,將其拿到資料庫執行,結果與應用查詢得到的資料量不同
-
懷疑過是 LocalDateTime 轉換問題、MP問題、應用時區問題,debug 證明不是
-
祭出度娘,找到了 https://www.cnblogs.com/ingxx/p/13476718.html,進而定位到了是資料庫驅動問題

-
原文說的是8.0以上都有時區問題,之后就是各種測驗,發現并不是所有8以上版本都有問題,然后就是二分法找到沒有此問題的版本(8.0.22)

-
之后官網找到了bug修復說明 https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/news-8-0-22.html
結論
一切的源頭都是因為我將 springboot 從 2.5.8 升級為了 2.7.8,并且在mysql驅動8.0.31的時候考慮到規范問題,修改了坐標!!!
在 spring-boot-dependencies 2.5.8 的時候,依賴的mysql驅動包版本為 8.0.27,在 2.7.8 的時候,依賴的mysql驅動包版本為 8.0.32;
升級之后,編譯的時候出現如下錯誤:

所以就很簡單的增加了一個版本
正確的做法應該是洗掉舊的倉庫坐標,添加新的驅動坐標:
<!-- 版本號已由 springboot 自動配置 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
萬事有因,當問題排查出來并且解決的時候,是真的舒服~
本文來自博客園,作者:君子如珩~,轉載請注明原文鏈接:https://www.cnblogs.com/shulipeng/p/17176416.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545712.html
標籤:其他
上一篇:Spring事務使用注意事項
下一篇:05for回圈
