springboot 统一时区

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

原文地址:https://www.cnblogs.com/idea-persistence/p/13366749.html