SpringBoot接口返回的數(shù)據(jù)時(shí)間與實(shí)際相差8小時(shí)問題排查方式
SpringBoot接口返回的數(shù)據(jù)時(shí)間與實(shí)際相差8小時(shí)問題
場景描述
部署了一個(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ù)庫后的時(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ù)庫時(shí)間
打開數(shù)據(jù)庫,查看數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)庫時(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ù)庫的時(shí)間與實(shí)際時(shí)區(qū)相差8小時(shí):
如果排查第三步獲取到的時(shí)間與實(shí)際時(shí)間相差8小時(shí),可以在SpringBoot應(yīng)用配置文件application.yml修改數(shù)據(jù)庫連接信息,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í)間不正確的問題解決
- springboot配置請(qǐng)求超時(shí)時(shí)間(Http會(huì)話和接口訪問)
- SpringBoot根據(jù)各地區(qū)時(shí)間設(shè)置接口有效時(shí)間的實(shí)現(xiàn)方式
- SpringBoot優(yōu)化接口響應(yīng)時(shí)間的九個(gè)技巧
- Springboot項(xiàng)目長時(shí)間不進(jìn)行接口操作,提示HikariPool-1警告的解決
相關(guān)文章
SpringBoot集成Devtools實(shí)現(xiàn)熱更新
DevTools是開發(fā)者工具集,主要用于簡化開發(fā)過程中的熱部署問題,熱部署是指在開發(fā)過程中,當(dāng)代碼發(fā)生變化時(shí),無需手動(dòng)重啟應(yīng)用,系統(tǒng)能夠自動(dòng)檢測(cè)并重新加載修改后的代碼,本文給大家介紹了SpringBoot集成Devtools實(shí)現(xiàn)熱更新,需要的朋友可以參考下2024-08-08
java設(shè)計(jì)模式學(xué)習(xí)之工廠方法模式
這篇文章主要介紹了java設(shè)計(jì)模式學(xué)習(xí)之工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
java實(shí)現(xiàn)獲取網(wǎng)站的keywords,description
這篇文章主要介紹了java實(shí)現(xiàn)獲取網(wǎng)站的keywords,description的相關(guān)資料,需要的朋友可以參考下2015-03-03
詳解Spring Data JPA系列之投影(Projection)的用法
本篇文章主要介紹了詳解Spring Data JPA系列之投影(Projection)的用法,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07
基于java查找并打印輸出字符串中字符出現(xiàn)次數(shù)
這篇文章主要介紹了基于java查找并打印輸出字符串中字符出現(xiàn)次數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Java實(shí)現(xiàn)樹形List與扁平List互轉(zhuǎn)的示例代碼
在平時(shí)的開發(fā)中,我們時(shí)常會(huì)遇到需要將"樹形List"與"扁平List"互轉(zhuǎn)的情況,本文為大家整理了Java實(shí)現(xiàn)樹形List與扁平List互轉(zhuǎn)的示例代碼,希望對(duì)大家有所幫助2023-05-05

