自学内容网 自学内容网

SpringBoot应用部署到Docker中MySQL8时间戳相差8小时问题及处理方式

SpringBoot应用部署到Docker中MySQL8时间戳相差8小时问题及处理方式

  1. 将Spring Boot应用程序部署到Docker容器中,并且该应用程序与MySQL 8数据库交互时,如果发现创建的时间戳相差8小时,这通常是因为时间区(Time Zone)设置的问题;
  2. 可通过以下几种方式来设置时区

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.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: 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=true
    username: ????
    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

原文地址:https://blog.csdn.net/yuanjinshenglife/article/details/143419469

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!