• 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

  • 相关阅读:
    【转载】webDriver拾级而上·之五 iframe的处理
    Linux课程笔记 用户和用户组管理
    Linux课程笔记 文件和目录权限
    Linux课程笔记 软硬链接
    Java算法面试题
    Linux课程笔记 Day09 课上内容总结 MySql,Php的安装及Apache,Nginx,Php的优化
    Day13 高级子查询
    Day12 SET运算符
    Day11 其他数据库对象
    Linux课程笔记 Day08 课上内容总结 Apache,Raid技术及Nginx
  • 原文地址:https://www.cnblogs.com/idea-persistence/p/13366749.html
Copyright © 2020-2023  润新知