SpringBoot集成MyBatis的時(shí)區(qū)問(wèn)題

今天半抱,在做黑馬的秒殺項(xiàng)目時(shí)發(fā)現(xiàn)了一個(gè)關(guān)于MySQL連接配置信息serverTimezone的問(wèn)題膜宋。

問(wèn)題

秒殺項(xiàng)目為了保證商品信息加載的速度,會(huì)用到緩存減少數(shù)據(jù)庫(kù)訪問(wèn)的壓力秋茫。應(yīng)該在秒殺開(kāi)始前將數(shù)據(jù)從MySQL中取出并存入Redis中。

秒殺商品實(shí)體類:

public class SeckillGoods implements Serializable{
    @Column(name = "status")
    private String status;//審核狀態(tài)肛著,0未審核圆兵,1審核通過(guò)枢贿,2審核不通過(guò)

    @Column(name = "start_time")
    private Date startTime;//開(kāi)始時(shí)間

    @Column(name = "end_time")
    private Date endTime;//結(jié)束時(shí)間
    
    @Column(name = "stock_count")
    private Integer stockCount;//剩余庫(kù)存數(shù)
    //Getter Setter及無(wú)關(guān)屬性已刪除
}

秒殺商品表結(jié)構(gòu):

create table changgou_seckill.tb_seckill_goods
(    status       char           null comment '審核狀態(tài),0未審核局荚,1審核通過(guò)统抬,2審核不通過(guò)',
    start_time   datetime       null comment '開(kāi)始時(shí)間',
    end_time     datetime       null comment '結(jié)束時(shí)間',
# 省略無(wú)關(guān)屬性..
)  charset = utf8;

在跟著視頻做訪問(wèn)MySQL數(shù)據(jù)庫(kù)操作時(shí)發(fā)現(xiàn)即使使用相同的代碼也無(wú)法取出當(dāng)前時(shí)間段符合秒殺條件的商品信息。經(jīng)過(guò)一段時(shí)間的debug,發(fā)現(xiàn)聪建,視頻中的“當(dāng)前時(shí)間”是2019年,而我的”當(dāng)前時(shí)間“是2020年茫陆,能查出來(lái)才怪金麸。于是我修改代碼將“當(dāng)前時(shí)間”固定為2019年。

可是事情發(fā)展總是沒(méi)有那么順利簿盅,即使是使用修改后的代碼進(jìn)行查詢挥下,tk-MyBatis返回的數(shù)據(jù)仍然是空的。

看到這桨醋,我首先想到判斷是否為SQL語(yǔ)句有誤:

SELECT  id,status,start_time,end_time FROM tb_seckill_goods  WHERE (
    status = '1'
    and stock_count > 0
    and start_time <= '2019-05-23 16:14:23'
    and end_time >= '2019-05-23 16:14:23')
數(shù)據(jù)庫(kù)查詢

沒(méi)問(wèn)題棚瘟。

接著,我懷疑是否是tk-MyBatis生成的SQL語(yǔ)句存在問(wèn)題喜最。

所以偎蘸,我開(kāi)啟debug模式,一步步跟蹤tk-MyBatis的源代碼瞬内,最后在org.apache.ibatis.executor.statement.PreparedStatementHandler#query找到了生成的完整的SQL語(yǔ)句:

tk-MyBatis生成的SQL語(yǔ)句

我一看迷雪,這和我固定的時(shí)間不太一樣:

固定的時(shí)間

我又一番debug,終于在com.mysql.cj.ClientPreparedQueryBindings#setTimestamp找到了原因:

時(shí)區(qū)時(shí)間轉(zhuǎn)換

可以看到它通過(guò)com.mysql.cj.protocol.a.NativeServerSession#getDefaultTimeZone獲取到時(shí)區(qū)虫蝶,然后使用SimpleDateFormat完成轉(zhuǎn)換:

時(shí)區(qū)時(shí)間轉(zhuǎn)換示例

和下面的例子差不多:

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        Date date = new Date();
        System.out.println(date);
        String format = simpleDateFormat.format(date);
        System.out.println(format);

測(cè)試結(jié)果:

Mon Nov 02 16:21:57 CST 2020
2020-11-02 08:21:57

正好章咧,差8個(gè)小時(shí),不就是UTC+8能真,時(shí)區(qū)問(wèn)題赁严,小意思。

解決

再次檢查視頻提供的配置文件粉铐,發(fā)現(xiàn)他們的MySQL的連接信息:

jdbc:mysql://192.168.29.140:3306/changgou_seckill?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

噢疼约,太簡(jiǎn)單了,直接改:

jdbc:mysql://192.168.29.140:3306/changgou_seckill?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC%2B8

大功告成

結(jié)果

參考

  1. jdbc連接mysq之serverTimezone設(shè)定
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秦躯,一起剝皮案震驚了整個(gè)濱河市忆谓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踱承,老刑警劉巖倡缠,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茎活,居然都是意外死亡昙沦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門载荔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盾饮,“玉大人,你說(shuō)我怎么就攤上這事∏鹚穑” “怎么了普办?”我有些...
    開(kāi)封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)衔蹲。 經(jīng)常有香客問(wèn)我呈础,道長(zhǎng),這世上最難降的妖魔是什么而钞? 我笑而不...
    開(kāi)封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮撬陵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袱结。我一直安慰自己,他們只是感情好垢夹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布维费。 她就那樣靜靜地躺著,像睡著了一般而晒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倡怎,一...
    開(kāi)封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天贱枣,我揣著相機(jī)與錄音,去河邊找鬼纽哥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛春塌,可吹牛的內(nèi)容都是我干的簇捍。 我是一名探鬼主播俏拱,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梯投!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尔艇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后终娃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡余佛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年窍荧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辉巡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕊退。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖净蚤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情今瀑,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布橘荠,位于F島的核電站愉粤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏衣厘。R本人自食惡果不足惜压恒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一错邦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撬呢,春花似錦、人聲如沸魂拦。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至荷愕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間安疗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工怖现, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人真竖。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓厌小,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親璧亚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348