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
- 输入
show variables like "%time_zone%";
,显示当前时区。 set global time_zone = '+8:00';
设置全局时间为东八区(+8个小时)。set time_zone = '+8:00';
修改当前会话的时区。flush privileges;
2、常用时间字段管理方法
-
同上述情况二中描述的将时间字段设置为自更新的;
-
在对应实体类上加上@DynamicUpdate 注解即可实现动态更新。
【问题】
对某个表项进行修改时,我们通常是先根据id获取该表项的对应实体对象,然后修改部分字段后在保存。若不加@DynamicUpdate 注解,则修改后无法同步动态更新时间,所以要加上该注解。
注意:2的同等做法为不在实体类中设置对应的时间属性即可,不过缺点是无法从服务端获取到时间信息了