SpringBoot接口返回的数据时间与实际相差8小时问题排查方式

 更新时间:2025年02月22日 09:14:14   作者:不会画画的画师  
文章描述了在部署SpringBoot应用到容器中时遇到请求接口返回时间与实际相差8小时的问题,并详细分析了可能的原因及具体的排查步骤和解决方案,总结指出,环境初始时区未配置是根本原因,建议在应用部署前配置好时区

SpringBoot接口返回的数据时间与实际相差8小时问题

场景描述

部署了一个SpringBoot应用在容器中,请求一个接口,接口返回的时间与实际相差8小时。

可能原因

1、容器的时区与实际时区相差差8小时

2、jvm时区与实际时区相差8小时

3、存入数据库后的时间相差8小时

4、后端获取的时间一致,但返回给前端后相差8小时

排查步骤

1、进入容器查看时间

$ date

2、编写一个java应用查看jvm时间

import java.util.Date;

public class Demo {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

3、查看数据库时间

打开数据库,查看数据库中存储的数据库时间是否与实际一致

4、在后台打印出后端获取到的数据的时间,是否与前端一致

解决方案

容器时区与实际时区相差8小时:

如果排查第一步获取到的时间与实际时间相差8小时,建议在容器的Dockerfile中添加以下内容:

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

jvm时区与实际时区相差8小时:

如果排查第二步获取到的时间与实际时间相差8小时,可以在SpringBoot的面向切面上或者main类上加以下代码

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
}

存入数据库的时间与实际时区相差8小时:

如果排查第三步获取到的时间与实际时间相差8小时,可以在SpringBoot应用配置文件application.yml修改数据库连接信息,url末尾添加serverTimeZone=GMT%2b8

Spring的json构造器导致时区不一致:

以上三种情况的根本原因是由于环境初始的时区未配置,最佳方案就是在应用部署前就配置好各自的时区。

排查第四步出现时区不一致,是spring的json构造器的时区与实际的不一致。

可以修改springboot配置文件application.yml,添加以下内容:

spring:
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot集成Devtools实现热更新

    SpringBoot集成Devtools实现热更新

    DevTools是开发者工具集,主要用于简化开发过程中的热部署问题,热部署是指在开发过程中,当代码发生变化时,无需手动重启应用,系统能够自动检测并重新加载修改后的代码,本文给大家介绍了SpringBoot集成Devtools实现热更新,需要的朋友可以参考下
    2024-08-08
  • Servlet中/和/*的区别详解

    Servlet中/和/*的区别详解

    本文将分析/和/*的区别这个老生常谈的问题,但是很多时候看完就忘了,关于此问题这一篇文章就够了,它将成为你的永久记忆,感兴趣的可以了解一下
    2021-07-07
  • java设计模式学习之工厂方法模式

    java设计模式学习之工厂方法模式

    这篇文章主要介绍了java设计模式学习之工厂方法模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java基础之堆内存溢出的解决

    Java基础之堆内存溢出的解决

    这篇文章主要介绍了Java基础之堆内存溢出的解决,文中有非常详细的图文示例及代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • java.lang.String类的使用

    java.lang.String类的使用

    这篇文章主要介绍了java.lang.String类的使用,以及字符串的相关知识,需要了解相关知识的小伙伴可以参考该篇文章
    2021-08-08
  • java实现获取网站的keywords,description

    java实现获取网站的keywords,description

    这篇文章主要介绍了java实现获取网站的keywords,description的相关资料,需要的朋友可以参考下
    2015-03-03
  • 详解Spring Data JPA系列之投影(Projection)的用法

    详解Spring Data JPA系列之投影(Projection)的用法

    本篇文章主要介绍了详解Spring Data JPA系列之投影(Projection)的用法,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • SpringBoot如何统一JSON信息返回

    SpringBoot如何统一JSON信息返回

    这篇文章主要介绍了SpringBoot如何统一JSON信息返回问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 基于java查找并打印输出字符串中字符出现次数

    基于java查找并打印输出字符串中字符出现次数

    这篇文章主要介绍了基于java查找并打印输出字符串中字符出现次数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java实现树形List与扁平List互转的示例代码

    Java实现树形List与扁平List互转的示例代码

    在平时的开发中,我们时常会遇到需要将"树形List"与"扁平List"互转的情况,本文为大家整理了Java实现树形List与扁平List互转的示例代码,希望对大家有所帮助
    2023-05-05

最新评论