若依项目操作记录显示时间少了 8 小时问题解决
参考 若依项目的系统日志 给一些接口加上操作记录。
在需要被记录日志的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,操作日期显示正常。
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »