1、背景
在实际项目中,服务器都是部署在美国,为了 时间的统一,需要都使用 UTC时间
2、怎么做
默认测试环境 安装的 mysql 都设置成了 UTC 时区。 但 在 代码层面, 有很多 更新的 地方用了 .setGmtModified(new Date()); 进行更新操作, 查看数据库 发现 主动设置 时间的值 都是 当前的时间, 数据库生成的时间都是 UTC 时间。
经过大量查询,有博客说是 用 Handler 处理的,, 或者到 Map.xml中 使用 UTC 时间函数的, 但感觉还是很麻烦
在想有没有一种配置,直接让 代码中的时间 到数据库自动就 映射呢,理论上来说肯定存在的。
最后发现这片文章,[SpringBoot 统一时区的方案](https://www.jianshu.com/p/504c17b35e17), 主要 配置如下?:
1、数据库 设置成 URC
2、数据库连接池中添加 参数:useLegacyDatetimeCode=false&serverTimezone=UTC
测试后,发现 主动设置的时间 到数据库都设置成了 UTC时间。
3、存在2个问题
+ 在没有保证服务器 时间的设置时, 只 设置 数据库连接池配置的时候,查询出来的 时间变成了 本地时间
+ 在没进行数据库连接池参数 设置的时候, 查询出来的结果是 数据库显示的时间(UTC),插入的是 本时区的当前时间
+ 最后 把 服务器也进行设置,置成 UTC 时区。 测试, 存入 数据库的是 UTC, 读取出来的也是 UTC时间
4 总结
这样的配置是最简便的,也不需要修改原有的代码。
配置如下:
4.1 设置 服务器的时区
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
4.2 mybatis 数据库连接池 添加 useLegacyDatetimeCode=false&serverTimezone=UTC
4.3 数据库设置成 UTC