关于SpringBoot mysql数据库时区问题

 更新时间:2021年06月09日 14:29:50   作者:树欲静而风不止  
在后端开发过程中经常会遇到几个时区设置问题,今天分几种情况给大家介绍SpringBoot mysql数据库时区问题,感兴趣的朋友跟随小编一起看看吧

寻找原因

后端开发中常见的几个时区设置

第一个设置点配置文件 spring.jackson.time-zone

第二个设置点 高版本SpringBoot版本 mysql-connector-java 用的是8.X,mysql8.X的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。

第三个设置点 mysql time_zone变量

词义

serverTimezone临时指定mysql服务器的时区

spring.jackson.time-zone 设置spring默认时区

system_time_zone mysql服务器时区 ,time_zone默认System追随system_time_zone

几种情况

1、time_zone 为 System,serverTimezone为GMT+8,jackson.time-zone未定义

插入情况

再查询此条记录

个人觉得Spring默认时区为格林尼治时区,web服务器当前时区为东八区,进行加8操作。

2、set GLOBAL time_zone = '+3:00',serverTimezone为GMT+8,jackson.time-zone为GMT+8

createTime 为 timestamp类型

修改配置后,需要重启SpringBoot

新增情况

数据库中显示

查询记录

个人理解,serverTimezone设置覆盖掉了mysql的time_zone变量,跟SpringBoot回话时区还是东8

3、上述环境,不重启SpringBoot,直接改变time_zone = '+5:00'

改变后,上条记录往后调整2小时。

SpringBoot查询,一样

说明,timeStamp类型存储的是格林尼治时间,加上time_zone时区

当time_zone变化时,回话没结束,serverTimeZone东8还是对应time_zone的东3

SpringBoot插入

个人理解,serverTimeZone东8 还是和 time_zone 东3对应,但是插入发现 当前time_zone已经改成东5,就加2小时。

重启SpringBoot,重新查询

虽然,mysql变量time_zone为+5,但是重启后,serverTimeZone直接覆盖,设置时间区间为东8

重新把time_zone改回东3

改回重新打开表,发现又回来了

不启动SpringBoot,查询数据,还是老样子

此时,添加一条数据。

往前推了2小时。

SpringBoot查询

重启SpringBoot,查出来就是库中数据。

总结:

1、timeStamp类型存储时间数据,当time_zone和serverTimeZone不统一情况,会话中,表中时间数据,按照serverTimeZone设定

2、如果过程中,修改了time_zone变量,库中数据直接变更。但是不影响当前会话查询,新增数据,就会根据time_zone调整量,调整实际入库。

3、SpringBoot重启,其实就是新会话。情况同上。

4、时间字段类型为datetime,serverTimezone为GMT+8,jackson.time-zone为GMT+8,time_zone为东3

插入

库中

查询

time_zone从东3修改为东5

重新打开库

不启动SpringBoot

重启SpringBoot,还是一样。

修改serverTimeZone为GMT,其他不改动

查询

总结:如果是datetime类型,serverTimeZone说了算。

以上就是关于SpringBoot mysql数据库时区问题的详细内容,更多关于SpringBoot mysql时区的资料请关注脚本之家其它相关文章!

相关文章

  • Java多线程中的wait、notify和park、unpark的使用详解

    Java多线程中的wait、notify和park、unpark的使用详解

    这篇文章主要介绍了Java多线程中的wait、notify和park、unpark的使用详解,它们都是线程之间进行协作的手段,都属于 Object 对象的方法,必须获得此对象的锁,才能调用这几个方法,需要的朋友可以参考下
    2023-12-12
  • 浅析MMAP零拷贝在RocketMQ中的运用

    浅析MMAP零拷贝在RocketMQ中的运用

    零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率,这篇文章主要介绍了MMAP零拷贝在RocketMQ中的运用,需要的朋友可以参考下
    2022-07-07
  • Spring IOC xml方式进行工厂Bean操作详解

    Spring IOC xml方式进行工厂Bean操作详解

    这篇文章主要介绍了Spring IOC xml方式进行工厂Bean操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Java中获取MongoDB连接的方法详解

    Java中获取MongoDB连接的方法详解

    这篇文章主要介绍了Java中获取MongoDB连接的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • MyBatis详细执行流程的全纪录

    MyBatis详细执行流程的全纪录

    这篇文章主要给大家介绍了关于MyBatis详细执行流程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java1.7全网最深入HashMap源码解析

    Java1.7全网最深入HashMap源码解析

    HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 nul
    2021-11-11
  • 利用Java实现mTLS调用

    利用Java实现mTLS调用

    这篇文章主要介绍使用 Java作为客户端 与受 mTLS 保护的服务交互。为了对我们的 Java 客户端进行 ssl 配置,我们需要先设置一个 SSLContext。这简化了事情,因为 SSLContext 可用于各种 http 客户端,接下来我们一起进入下面文章了解具体内容,需要的朋友可以参考一下
    2021-11-11
  • Java 字符串压缩与解压的开发记录

    Java 字符串压缩与解压的开发记录

    这篇文章主要介绍了Java 字符串压缩与解压的开发记录,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java Socket实现文件传输示例代码

    Java Socket实现文件传输示例代码

    这篇文章主要介绍了Java Socket实现文件传输示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 快速掌握Java8中的Optional

    快速掌握Java8中的Optional

    Optional 是一个容器类,代表一个值存在或不存在,Optional并不是用来替换所有的null,而是为了在设计良好的API中更明确地表达可能缺失的值,这篇文章主要介绍了Java8的Optional及使用,需要的朋友可以参考下
    2023-07-07

最新评论