最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot時(shí)區(qū)設(shè)置的幾個(gè)方面小結(jié)

 更新時(shí)間:2026年02月26日 10:28:11   作者:程序員wayn  
在日常開發(fā)中,時(shí)區(qū)問題常常像潛伏的地雷,一旦跨地區(qū)、跨服務(wù)器或跨系統(tǒng)部署,就可能出現(xiàn)日志錯(cuò)亂、數(shù)據(jù)庫時(shí)間偏移、定時(shí)任務(wù)不準(zhǔn)等問題,本文就來介紹一下SpringBoot時(shí)區(qū)設(shè)置,感興趣的可以了解一下

在日常開發(fā)中,時(shí)區(qū)問題常常像潛伏的地雷,平時(shí)看似沒事,一旦跨地區(qū)、跨服務(wù)器或跨系統(tǒng)部署,就可能出現(xiàn)日志錯(cuò)亂、數(shù)據(jù)庫時(shí)間偏移、定時(shí)任務(wù)不準(zhǔn)等問題。作為程序員,你必須了解 Spring Boot 應(yīng)用中 時(shí)區(qū)配置的各個(gè)層面,才能避免凌晨三點(diǎn)被時(shí)間問題追著哭。

本文我將從服務(wù)器、Spring Boot、數(shù)據(jù)庫、容器以及前端交互五個(gè)方面詳細(xì)講解,順便分享常用時(shí)區(qū)對(duì)照表和踩坑經(jīng)驗(yàn)。

1. 服務(wù)器時(shí)區(qū):?jiǎn)栴}的源頭

服務(wù)器時(shí)區(qū)是所有時(shí)間問題的起點(diǎn)。很多開發(fā)者只關(guān)注應(yīng)用代碼,卻忽略了服務(wù)器系統(tǒng)的時(shí)區(qū)配置。

  • Linux 系統(tǒng):時(shí)區(qū)信息存放在 /etc/localtime,可以通過 timedatectl 查看和修改。
  • Windows 系統(tǒng):使用系統(tǒng)自帶時(shí)區(qū)設(shè)置,但在遠(yuǎn)程服務(wù)器或容器中可能與開發(fā)環(huán)境不一致。

踩坑案例:我曾經(jīng)遇到過一個(gè)定時(shí)任務(wù),每天凌晨 0 點(diǎn)在開發(fā)機(jī)上執(zhí)行正常,但部署到美國東部的服務(wù)器后,實(shí)際執(zhí)行時(shí)間變成了前一天的上午 11 點(diǎn),因?yàn)榉?wù)器默認(rèn)時(shí)區(qū)是 CST(美國中部時(shí)間),而開發(fā)機(jī)是北京時(shí)間。

解決方法有兩種,一是修改服務(wù)器時(shí)區(qū),而是修改 JVM 時(shí)區(qū)。

# 查看當(dāng)前服務(wù)器時(shí)區(qū)
timedatectl

# 設(shè)置為北京時(shí)間(Asia/Shanghai)
sudo timedatectl set-timezone Asia/Shanghai

當(dāng)然很多時(shí)候,服務(wù)器的時(shí)區(qū)不是我們能改得,我們就只能通過下面方式修改 JVM 時(shí)區(qū)。

同時(shí),JVM 啟動(dòng)時(shí)也要指定時(shí)區(qū):

java -jar -Duser.timezone=Asia/Shanghai app.jar

這樣,服務(wù)器系統(tǒng)時(shí)間和 JVM 默認(rèn)時(shí)間就統(tǒng)一,避免時(shí)間偏差。

2. Spring Boot 全局時(shí)區(qū)配置

即使服務(wù)器時(shí)區(qū)正確,如果 Spring Boot 沒有顯式指定時(shí)區(qū),部分組件仍然可能使用 JVM 默認(rèn)時(shí)區(qū),導(dǎo)致日志、定時(shí)任務(wù)或數(shù)據(jù)序列化出現(xiàn)偏差。

方法1 全局默認(rèn)時(shí)區(qū)

在啟動(dòng)類中設(shè)置全局時(shí)區(qū):

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        // 設(shè)置全局默認(rèn)時(shí)區(qū)
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
        SpringApplication.run(MyApplication.class, args);
    }
}

注意:TimeZone.setDefault 必須在 SpringApplication.run 前調(diào)用,否則應(yīng)用組件初始化時(shí)可能仍使用 JVM 原始時(shí)區(qū)。

方法2 Jackson 序列化時(shí)區(qū)

Spring Boot 默認(rèn)使用 Jackson 將 Java 日期對(duì)象序列化為 JSON,如果不設(shè)置時(shí)區(qū),返回給前端的時(shí)間可能是 CST(美國時(shí)間),導(dǎo)致用戶看到的時(shí)間不對(duì)。

配置方法

spring:
  jackson:
    time-zone: Asia/Shanghai

或者在代碼中:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
    return mapper;
}

3. 數(shù)據(jù)庫時(shí)區(qū):MySQL 配置

數(shù)據(jù)庫是時(shí)區(qū)問題的高發(fā)區(qū)。MySQL 的 TIMESTAMP 類型會(huì)自動(dòng)根據(jù)服務(wù)器時(shí)區(qū)進(jìn)行存儲(chǔ)轉(zhuǎn)換,如果 JDBC 連接沒有指定時(shí)區(qū),寫入的數(shù)據(jù)就可能與預(yù)期不一致。

方法1 數(shù)據(jù)庫層配置

# 查看當(dāng)前時(shí)區(qū)
SELECT @@global.time_zone, @@session.time_zone;

# 設(shè)置數(shù)據(jù)庫時(shí)區(qū)為北京時(shí)間
SET GLOBAL time_zone = '+08:00';
SET time_zone = '+08:00';

方法2 JDBC 層配置

Spring Boot 配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf-8
    username: root
    password: 123456

serverTimezone 參數(shù)指定 JDBC 連接使用的時(shí)區(qū),避免報(bào) The server time zone value is unrecognized 錯(cuò)誤,并確保寫入和讀取的時(shí)間一致。

踩坑案例:有一次,我的定時(shí)任務(wù)寫入數(shù)據(jù)庫的 LocalDateTime,在開發(fā)機(jī)上顯示正確,但生產(chǎn)數(shù)據(jù)庫顯示早了 8 小時(shí),原因是生產(chǎn)服務(wù)器和 MySQL 容器默認(rèn)時(shí)區(qū)是 CST(美國時(shí)間)。

4. 容器化部署時(shí)區(qū)配置

在 Docker 或 Kubernetes 環(huán)境中,容器默認(rèn)使用鏡像系統(tǒng)的時(shí)區(qū),和宿主機(jī)或 JVM 時(shí)區(qū)可能不同,因此必須顯式配置。

方法1 Docker 環(huán)境變量

environment:
  - TZ=Asia/Shanghai
  - JAVA_OPTS=-Duser.timezone=Asia/Shanghai

方法2 掛載宿主機(jī)時(shí)區(qū)

volumes:
  - /etc/localtime:/etc/localtime:ro
  - /etc/timezone:/etc/timezone:ro

優(yōu)點(diǎn):確保容器和宿主機(jī)時(shí)區(qū)一致,避免跨容器時(shí)間偏差。

方法3 Dockerfile 內(nèi)固定時(shí)區(qū)

FROM openjdk:17-jdk-slim
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY target/myapp.jar /app.jar
ENTRYPOINT ["java","-Duser.timezone=Asia/Shanghai","-jar","/app.jar"]

5. 常用時(shí)區(qū)對(duì)照

在 Spring Boot、數(shù)據(jù)庫、Docker 等場(chǎng)景中,推薦使用 IANA 時(shí)區(qū) ID,避免縮寫歧義。

中國及東亞

時(shí)區(qū) ID描述UTC 偏移
Asia/Shanghai北京時(shí)間UTC+08:00
Asia/Urumqi烏魯木齊時(shí)間UTC+06:00
Asia/Tokyo日本時(shí)間UTC+09:00

北美

時(shí)區(qū) ID描述UTC 偏移
America/New_York美國東部時(shí)間UTC-05:00 / UTC-04:00
America/Chicago美國中部時(shí)間UTC-06:00 / UTC-05:00

歐洲

時(shí)區(qū) ID描述UTC 偏移
Europe/London英國時(shí)間UTC+0 / UTC+1
Europe/Paris法國時(shí)間UTC+1 / UTC+2

5. 總結(jié)

時(shí)區(qū)配置雖然看似簡(jiǎn)單,但涉及的層面很多,需要在操作系統(tǒng)、JVM、Spring Boot應(yīng)用、數(shù)據(jù)庫等各個(gè)層面保持一致。

到此這篇關(guān)于SpringBoot時(shí)區(qū)設(shè)置的幾個(gè)方面小結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot時(shí)區(qū)設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決java -jar XXX.jar沒有主清單屬性以及找不到或無法加載主類的問題

    解決java -jar XXX.jar沒有主清單屬性以及找不到或無法加載主類的問題

    在使用Idea打包SpringBoot項(xiàng)目時(shí),可能會(huì)遇到“沒有主清單屬性”的錯(cuò)誤,問題原因是pom文件中缺少配置,未能正確打包成可執(zhí)行的jar,解決方法包括:1. 修改項(xiàng)目結(jié)構(gòu)并重新生成jar;2. 使用Maven插件在pom文件中添加spring-boot-maven-plugin配置
    2024-09-09
  • Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié)

    Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié)

    這篇文章主要介紹了Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • SpringBoot 集成 MyBatis/MyBatis-Plus使用示例教程

    SpringBoot 集成 MyBatis/MyBatis-Plus使用示例教程

    本文詳細(xì)介紹了如何在Spring Boot項(xiàng)目中集成MyBatis和MyBatis-Plus,并通過Lombok簡(jiǎn)化代碼,通過本文的學(xué)習(xí),開發(fā)者可以快速掌握Spring Boot集成MyBatis和MyBatis-Plus的完整流程,并利用Lombok提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • SpringBoot實(shí)現(xiàn)插件化架構(gòu)的4種方案詳解

    SpringBoot實(shí)現(xiàn)插件化架構(gòu)的4種方案詳解

    在復(fù)雜業(yè)務(wù)場(chǎng)景下,傳統(tǒng)的單體應(yīng)用架構(gòu)往往面臨著功能擴(kuò)展困難等困難,插件化架構(gòu)作為一種模塊化設(shè)計(jì)思想的延伸,能夠使系統(tǒng)具備更好的擴(kuò)展性和靈活性,下面我們來看看SpringBoot環(huán)境下實(shí)現(xiàn)插件化架構(gòu)的4種實(shí)現(xiàn)方案吧
    2025-05-05
  • Java讀取或刪除Excel文件文檔屬性的解決方案

    Java讀取或刪除Excel文件文檔屬性的解決方案

    Excel文件不僅僅是數(shù)據(jù)表格,它們還承載著重要的元數(shù)據(jù),即文檔屬性,這些屬性在文件管理、信息溯源和數(shù)據(jù)合規(guī)性方面扮演著關(guān)鍵角色,本文將深入探討如何利用功能強(qiáng)大的Spire.XLS for Java庫,輕松實(shí)現(xiàn)Excel文檔屬性的讀寫與刪除操作,需要的朋友可以參考下
    2025-12-12
  • SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息

    SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息

    在一次項(xiàng)目開發(fā)中,使用到了Netty網(wǎng)絡(luò)應(yīng)用框架,以及MQTT進(jìn)行消息數(shù)據(jù)的收發(fā),這其中需要后臺(tái)來將獲取到的消息主動(dòng)推送給前端,所以本文記錄了SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息的操作,需要的朋友可以參考下
    2024-02-02
  • spring框架下websocket的搭建

    spring框架下websocket的搭建

    本篇文章主要介紹了spring框架下websocket的搭建,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-03-03
  • Spring Boot中自動(dòng)執(zhí)行sql腳本的實(shí)現(xiàn)

    Spring Boot中自動(dòng)執(zhí)行sql腳本的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Boot中自動(dòng)執(zhí)行sql腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    這篇文章主要介紹了IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題,本文通過場(chǎng)景描述及問題解析,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java中BeanUtils.copyProperties()詳解及應(yīng)用場(chǎng)景

    Java中BeanUtils.copyProperties()詳解及應(yīng)用場(chǎng)景

    BeanUtils.copyProperties()是Apache?Commons?BeanUtils提供的方法,用于Java對(duì)象間屬性的復(fù)制,特別適用于DTO、VO和Entity之間的數(shù)據(jù)傳遞,這篇文章主要介紹了Java中BeanUtils.copyProperties()詳解及應(yīng)用場(chǎng)景的相關(guān)資料,需要的朋友可以參考下
    2024-09-09

最新評(píng)論

包头市| 福鼎市| 闽清县| 福鼎市| 大同县| 韶山市| 青州市| 汉寿县| 阜城县| 克什克腾旗| 渝中区| 勐海县| 临西县| 云霄县| 鹤壁市| 拉萨市| 舟曲县| 秦皇岛市| 武城县| 抚远县| 攀枝花市| 航空| 连南| 平乡县| 巧家县| 利川市| 将乐县| 清水河县| 屯门区| 出国| 荥经县| 贵阳市| 利津县| 长阳| 汤阴县| 奇台县| 肃南| 内黄县| 昭觉县| 保德县| 镇江市|