• SpringBoot 统一时区的方案


    系统采用多时区设计的时候,往往我们需要统一时区,需要统一的地方如下:

    • 服务器(Tomcat服务)
    • 数据库(JPA + Hibernate)
    • 前端数据(前端采用Vuejs)

    思路为:
    将数据库和服务器的时间都采用标准时区UTC存储处理。前端拿到标准时区的数据,统一根据用户所在时区进行转换。这样保证了后端数据时区的一致性,前端根据实际情况进行渲染。

    保证服务器时区为UTC

    服务启动的时候,将当前时区设置为UTC,代码如下:

    @SpringBootApplication
        public class Application {
          @PostConstruct
          void started() {
            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    //TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
    //TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
    } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 
    

      

    这样就保证了Java程序的时区为UTC。

    保证数据库时区为UTC

    Hibernate支持设置时区,在Springboot中增加配置如下:

    spring.jpa.properties.hibernate.jdbc.time_zone = UTC

    如果是MySQL数据库,连接池链接后面增加配置如下:

    ?serverTimezone=TimeZone&useLegacyDatetimeCode=false

    如:

    spring.datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=UTC

    其中useLegacyDatetimeCode参数默认是true,我们需要手动设置为false,否则无效。

    作者:Devid
    链接:https://www.jianshu.com/p/504c17b35e17
    來源:简书

  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/chancy/p/9995562.html
Copyright © 2020-2023  润新知