Springboot与Mysql时差时区问题

Springboot与Mysql时差时区问题

1、时差时区问题

情况一:手动插入时间戳

如在java代码中将 new Date() 插入到mysql的对应timestamp类型的字段中。这种情况属于服务器与数据库时差问题。

【解决】

在springboot配置文件application.yml中配置数据源url处添加参数如下:

重点就是 serverTimezone=GMT%2B8

在这里插入图片描述

情况二:mysql自动添加时间戳

如在建表时对时间字段这样创建:

`create_time` timestamp not null default current_timestamp comment '创建时间',
`update_time` timestamp not null default current_timestamp on update current_timestamp comment '更新时间',

这种情况导致的时差问题完全是mysql自己的问题,故要修改mysql的时区才可以

【解决】

参考:https://www.jianshu.com/p/adbcb34d71c2

  1. 输入show variables like "%time_zone%";,显示当前时区。
  2. set global time_zone = '+8:00'; 设置全局时间为东八区(+8个小时)。
  3. set time_zone = '+8:00'; 修改当前会话的时区。
  4. flush privileges;

2、常用时间字段管理方法

  1. 同上述情况二中描述的将时间字段设置为自更新的;

  2. 在对应实体类上加上@DynamicUpdate 注解即可实现动态更新。

    【问题】

    对某个表项进行修改时,我们通常是先根据id获取该表项的对应实体对象,然后修改部分字段后在保存。若不加@DynamicUpdate 注解,则修改后无法同步动态更新时间,所以要加上该注解。
    注意:2的同等做法为不在实体类中设置对应的时间属性即可,不过缺点是无法从服务端获取到时间信息了

你可能感兴趣的:(JAVA后端学习)