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

  • 服务器(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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

关于java实现需要登录且带验证码的定时网络爬虫(爬取的数据存库)

 博主6月初的时候换了个工作,刚进来的时候什么事没有,愣是上班喝茶逛网站渡过了一周。那周周五的boss突然问我会不会爬虫。 作为一个才工作一年的java...

阅读全文

ubuntu 搭建S3服务 mino单机和集群集群

搭建mino 集群 单机版 # 新建用户 sudo useradd -r minio-user -s /sbin/nologin sudo chown -R minio-user:minio-user /usr/local/bin/minio sudo mk...

阅读全文

分布式Minio快速入门

分布式Minio快速入门     分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上...

阅读全文

评论已经关闭。