问题现象
今天碰到一个奇怪的问题。宿主机时间正确,容器时间正确,数据库时间正确。
但是,springboot日志时间错误,数据库插入数据时间错误,相差8小时。
这明显是因为时区错误导致的问题,但是所有地方时区检查都是正确的,一时找不到方向。
分析问题
由于打印日志的时间不对,初步判断是jre的时区错误,首先解决日志时间错误问题。
解决方法
通过百度,初步判断是创建镜像时使用的基础镜像openjdk:8-jdk-alpine本身不带时区信息导致的,因此在启动jar包时添加参数,经测试问题解决。日志时间正常,插入数据库时间正常。
java -jar -Duser.timezone=Asia/Shanghai app.jar
其他方案
网上还说了两个其他方案,但是测试都无效。
- 在配置文件application.yaml中添加时区配置
spring:
jackson:
time-zone: Asia/Shanghai
- 在Application启动类中添加设置时区代码
@PostConstruct
void setDefaultTimezone() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
}