SpringBoot应用部署到Docker中MySQL8时间戳相差8小时问题及处理方式
文章目录
- SpringBoot应用部署到Docker中MySQL8时间戳相差8小时问题及处理方式
- 1. 检查MySQL服务器的时间区设置
- 2. 在Spring Boot应用程序中设置时间区
- 3. Docker容器中通过Dockerfile设置时区
- 4. 在运行Docker容器时通过命令行传递环境变量
- 5. 启动SpringBoot应用时设置JVM参数来指定时区
SpringBoot应用部署到Docker中MySQL8时间戳相差8小时问题及处理方式
- 将Spring Boot应用程序部署到Docker容器中,并且该应用程序与MySQL 8数据库交互时,如果发现创建的时间戳相差8小时,这通常是因为时间区(Time Zone)设置的问题;
- 可通过以下几种方式来设置时区
1. 检查MySQL服务器的时间区设置
确保MySQL服务器正确设置了所需的时间区。你可以通过执行以下SQL命令来查看和设置MySQL服务器的时间区
-- 查看当前会话的时间区
SELECT @@session.time_zone;-- 设置会话时间区
SET time_zone = '+08:00'; -- 或者使用 'Asia/Shanghai' 等名称
2. 在Spring Boot应用程序中设置时间区
确保你的Spring Boot应用程序配置文件(如application.properties或application.yml)中正确设置了JDBC连接字符串,包含时间区参数。例如下面配置中的
serverTimezone=Asia/Shanghai
指定了服务器的时间区为上海时区。
spring:# 数据源配置datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/your_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=trueusername: ????password: ????
3. Docker容器中通过Dockerfile设置时区
如果你的应用程序运行在一个Docker容器中,确保容器也正确设置了时间区。可以通过在Dockerfile中添加相应的环境变量来设置时间区:
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
4. 在运行Docker容器时通过命令行传递环境变量
docker run -e TZ=Asia/Shanghai ...
5. 启动SpringBoot应用时设置JVM参数来指定时区
java -Duser.timezone=Asia/Shanghai -jar your_app.jar