解决 JPA 中 new Date() 插入数据库时间差 8 小时问题
一、Docker 部署环境时
分别检查 docker 内部镜像时区,如果时区不正确,推荐将 docker 镜像的时区和系统时区绑定。
yaml
version: "3"
services:
deploy:
build: .
container_name: doc_server
network_mode: "host"
ports:
- 8080:8080
volumes:
- ./log:/log
# 时区绑定到系统时间
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
二、JPA 进行新增数据时
createTime 采用 new Date() 方式,则有可能出现时差问题,解决方案如下:
a. 修改 JDBC 参数的 serverTimezone=GMT%2b8
yaml
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://17.17.27.21:3306/dbname?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
username: root
password: root
b. 修改在时间的实体类上加注解:@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
// 创建时间
@Basic
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name = "create_time", columnDefinition = "datetime COMMENT '创建时间'")
private Date createTime;
// 更新时间
@Basic
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name = "update_time", columnDefinition = "datetime COMMENT '更新时间'")
();

