若依项目操作记录显示时间少了 8 小时问题解决

2023-04-06T18:19:00

参考 若依项目的系统日志 给一些接口加上操作记录。

在需要被记录日志的controller方法上添加@Log注解,使用方法如下:
@Log(title = "xxx接口", businessType = BusinessType.OTHER)
public AjaxResult addSave(...)
{
    return success(...);
}

项目使用注解 com/ruoyi/common/annotation/Log.java 写入操作记录。

操作日志记录逻辑实现代码LogAspect.java

如果后台没有显示操作记录,肯定是接口调错了。

之后发现记录中的操作日期一栏的时间不对,显示比实际的时间少 8 个小时。

按照 SpringBoot接口返回的数据时间与实际相差8小时问题排查 介绍的方法,分别测试容器、jvm 和 mysql 数据库的当前时间。项目的数据库连接使用了 serverTimezone=GMT%2B8,项目肯定是不会有问题的。

1. 容器或服务器的时间

# date
Thu 06 Apr 2023 06:06:54 PM CST

显示正常

2. 编写一个java应用查看jvm时间

import java.util.Date;

public class Demo {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

服务器上创建一个 Demo.java 文件,javac Demo.java + java Demo 生成字节码并执行,时间也是正常的。

3. 查看数据库时间

SELECT NOW();

show variables like '%time_zone%';

SELECT @@global.time_zone;

SELECT @@session.time_zone;

确实是数据库的问题,time_zone 变量为 SYSTEM,而 system_time_zone 为 UTC,所以 mysql 数据库的时区是有问题的,需要改成东八。

因为使用的是 docker 安装的 mysql 容器,参考 修改Docker容器中的mysql时区的三种方式

# 我是使用了 portainer 直接进入容器
> apt-get update
> apt-get install vim
> vim /etc/mysql/my.cnf
[mysqld]
default-time-zone='+08:00'
# 然后点击重启容器即可,容器的 ip 没有发生变化

再回到数据库连接工具中,查询,使用上面的 SELECT NOW(); 时间正常,show variables like '%time_zone%';time_zone 已经变成了 +08:00

再次调用接口,ok,操作日期显示正常。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »