这个问题很有可能是多中原因产生,今天主要我主要是解决常见的,遇到最多的问题。
前景:我遇到的问题是我部署在服务器上的springboot项目,在生成Tokin过期时间时跟当前时间不一致导致过期时间不准确。
有相同问题的小伙伴,直接抄作业!
问题:直接打成jar的springboot项目在服务器中直接运行,获取当前时间戳是会比当前时间满12个小时
那我们直接上干货!!!
解决方法:
- 查看数据库时区与数据库连接配置
使用sql查询服务器数据库时间select new();
发现时间没有如何问题。
然后查看数据库连接属性 ?useUnicode=true&characterEncoding=UTF-8**&serverTimezone=UTC**有时区设置 - 查看服务器系统时间
使用date
命令查看,没有问题;
使用date -R
查看当前时区,还是没有问题; - 查看服务器硬件时间
使用sudo hwclock --show
命令查看,也没有问题;
查看项目日志, 发现项目日志时间也是错的, 比当前时间慢了12小时
通过网上查阅资料, 定位到是JVM问题
首先找到的方法就是在启动jar包的命令中添加时区参数
java -jar -Duser.timezone=GMT+08 xxx.jar
但是这是一个临时解决, 每次启动都需要添加时区参数, 会很麻烦, 所以我就找了下面这种一次性解决的方法。
有一点需要注意: 实际执行的时候, 这几个命令是需要使用管理员权限来执行的, 在前面添加 sudo 就可以
- 编辑时间配置文件
使用sudo vim /etc/sysconfig/clock
命令进行编辑
增加以下内容:
ZONE=“Asia/Shanghai”
UTC=false #设置为false,硬件时钟不于utc时间一致
ARC=false
- linux的时区设置为上海时区
使用sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
命令 - 对准时间
使用sudo ntpdate cn.pool.ntp.org
命令 - 设置硬件时间和系统时间一致并校准
使用sudo /sbin/hwclock --systohc
命令
最后我们再去重新启动我们的项目就打工完成了!是不是特变简单,所以说遇到问题不可怕,可怕的是不去解决问题。