如何解决springboot数据库查询时出现的时区差异问题

 更新时间:2023年01月06日 16:43:12   作者:这小呆  
这篇文章主要介绍了如何解决springboot数据库查询时出现的时区差异问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot数据库查询时出现的时区差异

最近项目中使用到多数据源将MySQL库中的数据迁移到mongo库中,发现取出后的数据与原数据时间上会出现8小时的相差,

最后度娘后终于解决问题,记录一下:

网上看到了两种比较实用的方法,因为使用的springboot原因,所以我这里使用的是在配置文件application.yml中进行修改,另外其他方法网上都可以搜到,

1.在连接数据库的配置上我们添加一项

&serverTimezone=GMT%2b8
 primary:
      jdbc-url: jdbc:mysql://******:3306/***?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
      username: ****
      password: *****
    secondary:
      jdbc-url: jdbc:mysql://*******:3306/***?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
      username: *****
      password: ********

原格式应该是这样的:

&serverTimezone=GMT+8 这里使用%2b替换 + 号

2.直接在boot配置文件中增加jackson配置

#在application.yml中增加配置
spring:
    jackson:
        time-zone: GMT+8

这样就可以成功将时间修改成功了,还有其他方法,大家可以查阅哦

springboot new Date()时区差8小时

1 在k8s环境中,在代码中比较时间。new Date() 下相差8小时

检查宿主机 时区是 cst时区

用java代码写出controller时区发现是GMT

代码如下:

Calendar calendar = Calendar.getInstance();      
        System.out.println("目前时间:" + calendar.getTime());
        System.out.println("Calendar时区::" + calendar.getTimeZone().getID());
        System.out.println("user.timezone:" + System.getProperty("user.timezone"));
        System.out.println("user.country:" + System.getProperty("user.country"));
        System.out.println("默认时区:" + TimeZone.getDefault().getID());

输出时区是 GMT 跟宿主机还不一样,搞不定运维,自己搞把

看来还是时区搞的鬼-

1、数据库链接db添加参数 serverTimezone=Asia/Shanghai

2、springboot启动脚本添加 -Duser.timezone=GMT+08

3、jackson 全局配置

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

4、jackson 注解

@JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)

总结

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

相关文章

  • Java中的LinkedHashMap及LRU缓存机制详解

    Java中的LinkedHashMap及LRU缓存机制详解

    这篇文章主要介绍了Java中的LinkedHashMap及LRU缓存机制详解,LinkedHashMap继承自HashMap,它的多种操作都是建立在HashMap操作的基础上的,同HashMap不同的是,LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序,需要的朋友可以参考下
    2023-09-09
  • RocketMQ根据Tag进行消息过滤

    RocketMQ根据Tag进行消息过滤

    消费者订阅了某个主题后,Apache RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息,可通过设置过滤条件在 Apache RocketMQ 服务端进行过滤,只获取到需要关注的消息子集,避免接收到大量无效的消息
    2023-02-02
  • Java汉字转拼音案例详解

    Java汉字转拼音案例详解

    这篇文章主要介绍了Java汉字转拼音案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java判断当前日期是周几的方法汇总

    Java判断当前日期是周几的方法汇总

    在Java编程中,我们经常会遇到需要获取当前日期是周几的需求。根据国际惯例,一周通常是从周一开始,到周日结束,记作1至7,本文将介绍几种常用的Java方法,让你能够准确地判断当前日期是周几,感兴趣的朋友一起看看吧
    2024-03-03
  • 详解java中的PropertyChangeSupport与PropertyChangeListener

    详解java中的PropertyChangeSupport与PropertyChangeListener

    这篇文章主要介绍了详解java中的PropertyChangeSupport与PropertyChangeListener的相关资料,需要的朋友可以参考下
    2017-09-09
  • java.net.ConnectException异常的正确解决方法(亲测有效!)

    java.net.ConnectException异常的正确解决方法(亲测有效!)

    java.net.ConnectException异常是与网络相关的最常见的Java异常之一,建立从客户端应用程序到服务器的TCP连接时,我们可能会遇到它,这篇文章主要给大家介绍了关于java.net.ConnectException异常的正确解决方法,需要的朋友可以参考下
    2024-01-01
  • 解决@PathVariable对于特殊字符截断的问题

    解决@PathVariable对于特殊字符截断的问题

    这篇文章主要介绍了解决@PathVariable对于特殊字符截断的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java方法引用原理实例解析

    Java方法引用原理实例解析

    这篇文章主要介绍了Java方法引用的原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • Java中的WeakHashMap源码分析

    Java中的WeakHashMap源码分析

    这篇文章主要介绍了Java中的WeakHashMap源码分析,WeakHashMap可能平时使用的频率并不高,但是你可能听过WeakHashMap会进行自动回收吧,下面就对其原理进行分析,需要的朋友可以参考下
    2023-09-09
  • Java获取项目路径方式System.getProperty(“user.dir“)

    Java获取项目路径方式System.getProperty(“user.dir“)

    这篇文章主要介绍了Java获取项目路径方式System.getProperty(“user.dir“),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论