欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot如何統(tǒng)一設(shè)置時區(qū)

 更新時間:2023年01月06日 15:22:25   作者:阿良@  
這篇文章主要介紹了springboot如何統(tǒng)一設(shè)置時區(qū)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springboot 統(tǒng)一設(shè)置時區(qū)

控制springboot服務的時區(qū)為東八區(qū)

@SpringBootApplication
public class Application {
? public static void main(String[] args) {
? ? // 設(shè)置時區(qū)為上海時區(qū),即東八區(qū)
? ? TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.SHORT_IDS.get("CTT")));
? ? SpringApplication.run(Application.class, args);
? }
}

以下是測試例子

springboot 啟動時候設(shè)置時區(qū),如下代碼所示

@SpringBootApplication
public class EwPbServerApplication {

? ? public static void main(String[] args) {
? ? ? ? TimeZone timeZone = TimeZone.getTimeZone("UTC");
? ? ? ? TimeZone.setDefault(timeZone);
? ? ? ? SpringApplication.run(EwPbServerApplication.class, args);
? ? }
}

測試請求接口獲取時間

?? ?@GetMapping("test")
? ? @ApiOperation(value = "測試時間", httpMethod = "GET")
? ? public void test() {
? ? ? ? //當前時間為 2022-09-06 17:46
? ? ? ? //啟動類設(shè)置時區(qū)后,獲取當前時間
? ? ? ? Date date = new Date();
? ? ? ? DateTime date1 = DateUtil.date();
? ? ? ? LocalDateTime localDateTime = LocalDateTime.now();
? ? ? ? //設(shè)置時區(qū)為-東八區(qū)
? ? ? ? LocalDateTime.now(ZoneId.of("Asia/Shanghai"))

? ? ? ? log.info("date=={}", date);
? ? ? ? log.info("date1=={}", date1);
? ? ? ? log.info("localDateTime=={}", localDateTime);
? ? ? ? log.info("now=={}", now);
// ? ? ? ?2022-09-06 09:47:01.385 ?xxxx ?: date==Tue Sep 06 09:47:01 UTC 2022
// ? ? ? ?2022-09-06 09:47:01.385 ?xxxx ?: date1==2022-09-06 09:47:01
// ? ? ? ?2022-09-06 09:47:01.386 ?xxxx ?: localDateTime==2022-09-06T09:47:01.381
// ? ? ? ?2022-09-06 09:47:01.386 ?xxxx ?: now==2022-09-06T17:47:01.385
? ? }

由測試結(jié)果得知,springboot 啟動時設(shè)置時區(qū)之后全局生效,但是優(yōu)先級小于手動設(shè)置

springboot mysql 時區(qū)問題總結(jié)

尋找原因

后端開發(fā)中常見的幾個時區(qū)設(shè)置

第一個設(shè)置點配置文件   spring.jackson.time-zone

第二個設(shè)置點 高版本SpringBoot版本 mysql-connector-java 用的是8.X,mysql8.X的jdbc升級了,增加了時區(qū)(serverTimezone)屬性,并且不允許為空。

第三個設(shè)置點 mysql  time_zone變量

詞義

serverTimezone臨時指定mysql服務器的時區(qū)

spring.jackson.time-zone  設(shè)置spring默認時區(qū)

system_time_zone mysql服務器時區(qū) ,time_zone默認System追隨system_time_zone

幾種情況

1、time_zone 為 System,serverTimezone為GMT+8,jackson.time-zone未定義

插入情況

再查詢此條記錄

個人覺得Spring默認時區(qū)為格林尼治時區(qū),web服務器當前時區(qū)為東八區(qū),進行加8操作。

2、set GLOBAL time_zone = '+3:00',serverTimezone為GMT+8,jackson.time-zone為GMT+8

createTime 為 timestamp類型

修改配置后,需要重啟SpringBoot

新增情況

數(shù)據(jù)庫中顯示

查詢記錄

個人理解,serverTimezone設(shè)置覆蓋掉了mysql的time_zone變量,跟SpringBoot會話時區(qū)還是東8

3、上述環(huán)境,不重啟SpringBoot,直接改變time_zone = '+5:00'

改變后,上條記錄往后調(diào)整2小時。

SpringBoot查詢,一樣

說明,timeStamp類型存儲的是格林尼治時間,加上time_zone時區(qū)

當time_zone變化時,會話沒結(jié)束,serverTimeZone東8還是對應time_zone的東3

SpringBoot插入

個人理解,serverTimeZone東8 還是和 time_zone 東3對應,但是插入發(fā)現(xiàn) 當前time_zone已經(jīng)改成東5,就加2小時。

重啟SpringBoot,重新查詢

雖然,mysql變量time_zone為+5,但是重啟后,serverTimeZone直接覆蓋,設(shè)置時間區(qū)間為東8

重新把time_zone改回東3

改回重新打開表,發(fā)現(xiàn)又回來了

不啟動SpringBoot,查詢數(shù)據(jù),還是老樣子

此時,添加一條數(shù)據(jù)。

往前推了2小時。

SpringBoot查詢

重啟SpringBoot,查出來就是庫中數(shù)據(jù)。

4、serverTimezone為GMT,jackson.time-zone為GMT+8,time_zone為東3

serverTimeZone為格林尼治時間,web服務器為東八,所以直接推遲8小時

取出來剛好反一下,顯示正常。

此時,修改serverTimeZone為東八。

5、時間字段類型為timestamp,使用默認current_timestamp,  serverTimezone為GMT,jackson.time-zone為GMT+8,time_zone為東3

因mysql時區(qū)東三時間為

插入后數(shù)據(jù)為

但是serverTimeZone為格林尼治時間,jackson.time-zone為東八,加8小時

6、時間字段類型為datetime,serverTimezone為GMT+8,jackson.time-zone為GMT+8,time_zone為東3

插入

庫中

查詢

time_zone從東3修改為東5

重新打開庫

不啟動SpringBoot

重啟SpringBoot,還是一樣。

修改serverTimeZone為GMT,其他不改動

查詢

總結(jié)

jackson.time-zone管前端到web服務器 轉(zhuǎn)換的時區(qū)。

如果是時間類型為datetime,serverTimeZone說了算。

如果時間類型為timestamp

1、當time_zone和serverTimeZone不統(tǒng)一情況,會話中,表中時間數(shù)據(jù),按照serverTimeZone設(shè)定

2、如果過程中,修改了time_zone變量,庫中數(shù)據(jù)直接變更。但是不影響當前會話查詢,新增數(shù)據(jù),就會根據(jù)time_zone調(diào)整量,調(diào)整實際入庫。

3、SpringBoot重啟,其實就是新會話。情況同上_1。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)字符串的分割(基于String.split()方法)

    Java實現(xiàn)字符串的分割(基于String.split()方法)

    Java中的我們可以利用split把字符串按照指定的分割符進行分割,然后返回字符串數(shù)組,下面這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)字符串的分割的相關(guān)資料,是基于jDK1.8版本中的String.split()方法,需要的朋友可以參考下
    2022-09-09
  • (starters)springboot-starter整合阿里云datahub方式

    (starters)springboot-starter整合阿里云datahub方式

    這篇文章主要介紹了(starters)springboot-starter整合阿里云datahub方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java文件選擇對話框JFileChooser使用詳解

    Java文件選擇對話框JFileChooser使用詳解

    這篇文章主要介紹了Java文件選擇對話框JFileChooser使用詳解的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • 聊一聊SpringBoot服務監(jiān)控機制

    聊一聊SpringBoot服務監(jiān)控機制

    這篇文章主要介紹了聊一聊SpringBoot服務監(jiān)控機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • java使用Jdom實現(xiàn)xml文件寫入操作實例

    java使用Jdom實現(xiàn)xml文件寫入操作實例

    這篇文章主要介紹了java使用Jdom實現(xiàn)xml文件寫入操作的方法,以完整實例形式分析了Jdom針對XML文件寫入操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • SpringMVC REST風格深入詳細講解

    SpringMVC REST風格深入詳細講解

    這篇文章主要介紹了SpringMVC REST風格,Rest全稱為Representational State Transfer,翻譯為表現(xiàn)形式狀態(tài)轉(zhuǎn)換,它是一種軟件架構(gòu)
    2022-10-10
  • 解決java junit單元測試@Test報錯的問題

    解決java junit單元測試@Test報錯的問題

    今天小編就為大家分享一篇解決java junit單元測試@Test報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Spring Boot事務配置操作

    Spring Boot事務配置操作

    這篇文章主要介紹了Spring Boot事務配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java實現(xiàn)MD5加密的方式與實例代碼

    Java實現(xiàn)MD5加密的方式與實例代碼

    MD5加密是一種常見的加密方式,我們經(jīng)常用在保存用戶密碼和關(guān)鍵信息上。那么它到底有什么,又什么好處呢,會被這么廣泛的運用在應用開發(fā)中
    2021-10-10
  • mybatis Example的Criteria用法:or與isNull詳解

    mybatis Example的Criteria用法:or與isNull詳解

    這篇文章主要介紹了mybatis Example的Criteria用法:or與isNull詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論