springboot項(xiàng)目如何設(shè)置時(shí)區(qū)
springboot項(xiàng)目設(shè)置時(shí)區(qū)
在springboot啟動(dòng)類里添加如下代碼:
? ? @PostConstruct ? ?void setDefaultTimezone() { ? ? ? TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); // ? ?TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); ? ?}
用任何一個(gè)都行,將默認(rèn)時(shí)區(qū)設(shè)置為東八區(qū)。
應(yīng)用場(chǎng)景
有時(shí)候應(yīng)用服務(wù)器的時(shí)間是UTC協(xié)調(diào)世界時(shí)間,在我們用瀏覽器訪問(wèn)的時(shí)候,就會(huì)出現(xiàn)日期快八小時(shí),
因?yàn)榉?wù)器的時(shí)區(qū)跟我們東八區(qū)差八個(gè)小時(shí)導(dǎo)致的,用以上方法可以解決這個(gè)問(wèn)題。
springboot統(tǒng)一時(shí)區(qū)的方案
UTC時(shí)間是什么
- 協(xié)調(diào)世界時(shí),又稱世界統(tǒng)一時(shí)間、世界標(biāo)準(zhǔn)時(shí)間、國(guó)際協(xié)調(diào)時(shí)間。
- 由于英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡(jiǎn)稱UTC。
UTC +時(shí)區(qū)差=本地時(shí)間
中國(guó)時(shí)間
- 中國(guó)大陸、中國(guó)香港、中國(guó)澳門、中國(guó)臺(tái)灣、蒙古國(guó)、新加坡、
- 馬來(lái)西亞、菲律賓、西澳大利亞州的時(shí)間與UTC的時(shí)差均為+8,也就是UTC+8。
1.系統(tǒng)采用多時(shí)區(qū)設(shè)計(jì)的時(shí)候,往往我們需要統(tǒng)一時(shí)區(qū),需要統(tǒng)一的地方如下:
- 服務(wù)器(Tomcat服務(wù))
- 數(shù)據(jù)庫(kù)(JPA + Hibernate)
- 前端數(shù)據(jù)(前端采用Vuejs)
思路為:
- 將數(shù)據(jù)庫(kù)和服務(wù)器的時(shí)間都采用標(biāo)準(zhǔn)時(shí)區(qū)UTC存儲(chǔ)處理。
- 前端拿到標(biāo)準(zhǔn)時(shí)區(qū)的數(shù)據(jù),統(tǒng)一根據(jù)用戶所在時(shí)區(qū)進(jìn)行轉(zhuǎn)換。
- 這樣保證了后端數(shù)據(jù)時(shí)區(qū)的一致性,前端根據(jù)實(shí)際情況進(jìn)行渲染。
2.保證服務(wù)器時(shí)區(qū)為UTC
服務(wù)啟動(dòng)的時(shí)候,將當(dāng)前時(shí)區(qū)設(shè)置為UTC,代碼如下:
@SpringBootApplication ? ? public class Application { ? ? ? @PostConstruct ? ? ? void started() { ? ? ? ? TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
3.保證數(shù)據(jù)庫(kù)時(shí)區(qū)為UTC
Hibernate支持設(shè)置時(shí)區(qū),在Springboot中增加配置如下:
spring.jpa.properties.hibernate.jdbc.time_zone = UTC
如果是MySQL數(shù)據(jù)庫(kù),連接池鏈接后面增加配置如下:
?serverTimezone=TimeZone&useLegacyDatetimeCode=false
如:
spring.datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=UTC
其中useLegacyDatetimeCode參數(shù)默認(rèn)是true,我們需要手動(dòng)設(shè)置為false,否則無(wú)效。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?多數(shù)據(jù)源方法級(jí)別注解實(shí)現(xiàn)過(guò)程
多數(shù)據(jù)源管理是Spring框架中非常重要的一部分,它可以提高應(yīng)用程序的靈活性和可靠性,從而更好地滿足業(yè)務(wù)需求,這篇文章主要介紹了Spring?多數(shù)據(jù)源方法級(jí)別注解實(shí)現(xiàn),需要的朋友可以參考下2023-07-07Java中JMM與volatile關(guān)鍵字的學(xué)習(xí)
這篇文章主要介紹了通過(guò)實(shí)例解析JMM和Volatile關(guān)鍵字的學(xué)習(xí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09SpringMVC框架中使用Filter實(shí)現(xiàn)請(qǐng)求日志打印方式
這篇文章主要介紹了SpringMVC框架中使用Filter實(shí)現(xiàn)請(qǐng)求日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10JDBC使用Statement修改數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了JDBC使用Statement修改數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Spring mvc工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Spring mvc工作原理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08SpringBoot使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)
角色權(quán)限校驗(yàn),是保證接口安全必備的能力:有權(quán)限才可以操作,所以,一般對(duì)于這種通用邏輯,推薦不與主業(yè)務(wù)邏輯耦合,那么怎么來(lái)解耦,那么本文小編就給大家詳細(xì)講解如何使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn),需要的朋友可以參考下2023-07-07maven倉(cāng)庫(kù)訪問(wèn)順序小結(jié)
在日常操作中,相信很多人在maven倉(cāng)庫(kù)的優(yōu)先級(jí)順序是什么問(wèn)題上存在疑惑,本文就來(lái)介紹一下maven倉(cāng)庫(kù)訪問(wèn)順序,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10SpringBoot結(jié)合JSR303對(duì)前端數(shù)據(jù)進(jìn)行校驗(yàn)的示例代碼
這篇文章主要介紹了SpringBoot結(jié)合JSR303對(duì)前端數(shù)據(jù)進(jìn)行校驗(yàn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09