zoukankan      html  css  js  c++  java
  • 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
    來源:简书

  • 相关阅读:
    国内顺利使用Google的另类技巧
    Java进程间通信
    Java 多线程(七) 线程间的通信——wait及notify方法
    转:关于copy_to_user()和copy_from_user()的一些用法
    转: pthread_detach()函数
    转:pthread_create()
    转: ubuntu配置NFS,挂载开发板
    转:全志A20 GPIO 总结文档
    转:Linux 内核中的 cdev_alloc和cdev_add
    转:1.1 cdev_init cdev_alloc 使用说明
  • 原文地址:https://www.cnblogs.com/chancy/p/9995562.html
Copyright © 2011-2022 走看看