SpringBoot接口返回的數(shù)據(jù)時(shí)間與實(shí)際相差8小時(shí)問(wèn)題排查方式
SpringBoot接口返回的數(shù)據(jù)時(shí)間與實(shí)際相差8小時(shí)問(wèn)題
場(chǎng)景描述
部署了一個(gè)SpringBoot應(yīng)用在容器中,請(qǐng)求一個(gè)接口,接口返回的時(shí)間與實(shí)際相差8小時(shí)。
可能原因
1、容器的時(shí)區(qū)與實(shí)際時(shí)區(qū)相差差8小時(shí)
2、jvm時(shí)區(qū)與實(shí)際時(shí)區(qū)相差8小時(shí)
3、存入數(shù)據(jù)庫(kù)后的時(shí)間相差8小時(shí)
4、后端獲取的時(shí)間一致,但返回給前端后相差8小時(shí)
排查步驟
1、進(jìn)入容器查看時(shí)間
$ date
2、編寫一個(gè)java應(yīng)用查看jvm時(shí)間
import java.util.Date; public class Demo { public static void main(String[] args) { Date date = new Date(); System.out.println(date); } }
3、查看數(shù)據(jù)庫(kù)時(shí)間
打開數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)庫(kù)時(shí)間是否與實(shí)際一致
4、在后臺(tái)打印出后端獲取到的數(shù)據(jù)的時(shí)間,是否與前端一致
解決方案
容器時(shí)區(qū)與實(shí)際時(shí)區(qū)相差8小時(shí):
如果排查第一步獲取到的時(shí)間與實(shí)際時(shí)間相差8小時(shí),建議在容器的Dockerfile中添加以下內(nèi)容:
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone
jvm時(shí)區(qū)與實(shí)際時(shí)區(qū)相差8小時(shí):
如果排查第二步獲取到的時(shí)間與實(shí)際時(shí)間相差8小時(shí),可以在SpringBoot的面向切面上或者main類上加以下代碼
@PostConstruct void started() { TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); }
存入數(shù)據(jù)庫(kù)的時(shí)間與實(shí)際時(shí)區(qū)相差8小時(shí):
如果排查第三步獲取到的時(shí)間與實(shí)際時(shí)間相差8小時(shí),可以在SpringBoot應(yīng)用配置文件application.yml修改數(shù)據(jù)庫(kù)連接信息,url末尾添加serverTimeZone=GMT%2b8
Spring的json構(gòu)造器導(dǎo)致時(shí)區(qū)不一致:
以上三種情況的根本原因是由于環(huán)境初始的時(shí)區(qū)未配置,最佳方案就是在應(yīng)用部署前就配置好各自的時(shí)區(qū)。
排查第四步出現(xiàn)時(shí)區(qū)不一致,是spring的json構(gòu)造器的時(shí)區(qū)與實(shí)際的不一致。
可以修改springboot配置文件application.yml,添加以下內(nèi)容:
spring: jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 在SpringBoot接口中正確地序列化時(shí)間字段的方法
- SpringBoot項(xiàng)目中Date類型數(shù)據(jù)在接口返回的時(shí)間不正確的問(wèn)題解決
- springboot配置請(qǐng)求超時(shí)時(shí)間(Http會(huì)話和接口訪問(wèn))
- SpringBoot根據(jù)各地區(qū)時(shí)間設(shè)置接口有效時(shí)間的實(shí)現(xiàn)方式
- SpringBoot優(yōu)化接口響應(yīng)時(shí)間的九個(gè)技巧
- Springboot項(xiàng)目長(zhǎng)時(shí)間不進(jìn)行接口操作,提示HikariPool-1警告的解決
相關(guān)文章
Java IO中字節(jié)流復(fù)制圖片實(shí)現(xiàn)代碼
這篇文章主要介紹了Java IO中字節(jié)流復(fù)制圖片實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04使用Java實(shí)現(xiàn)查找并移除字符串中的Emoji
Emoji 實(shí)際上是 UTF-8 (Unicode) 字符集上的特殊字符,這篇文章主要介紹了如何使用Java實(shí)現(xiàn)查找并移除字符串中的Emoji,感興趣的可以了解下2024-03-03詳解Java多線程編程中線程的啟動(dòng)、中斷或終止操作
在Java中start和tun方法可用被用來(lái)啟動(dòng)線程,而用interrupt方法來(lái)中斷或終止線程,以下我們就來(lái)詳解Java多線程編程中線程的啟動(dòng)、中斷或終止操作2016-07-07在SpringBoot中實(shí)現(xiàn)多種方式登錄(通過(guò)用戶名、手機(jī)號(hào)、郵箱等)的詳細(xì)指南
今天,我們將跳進(jìn) Spring Boot 的世界,探索如何通過(guò) 用戶名、手機(jī)號(hào)、郵箱 等多種方式實(shí)現(xiàn)登錄,而我們要做的就是為他們提供這些選擇,確保他們都能毫無(wú)阻礙地進(jìn)入我們的系統(tǒng),感興趣的小伙伴跟著小編一起來(lái)看看吧2024-11-11java遞歸菜單樹轉(zhuǎn)換成pojo對(duì)象
這篇文章介紹了java遞歸菜單樹轉(zhuǎn)換成pojo對(duì)象的具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-08-08SpringBoot+aop實(shí)現(xiàn)主從數(shù)據(jù)庫(kù)的讀寫分離操作
讀寫分離的作用是為了緩解寫庫(kù),也就是主庫(kù)的壓力,但一定要基于數(shù)據(jù)一致性的原則,就是保證主從庫(kù)之間的數(shù)據(jù)一定要一致,這篇文章給大家介紹SpringBoot+aop實(shí)現(xiàn)主從數(shù)據(jù)庫(kù)的讀寫分離操作,感興趣的朋友跟隨小編一起看看吧2024-03-03Springboot升級(jí)至2.4.0中出現(xiàn)的跨域問(wèn)題分析及修改方案
這篇文章主要介紹了Springboot升級(jí)至2.4.0中出現(xiàn)的跨域問(wèn)題分析及修改方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12