背景和问题
项目采用springboot为框架,需要有一个定时任务的功能实现,使用springboot框架自带的工具实现,具体实现很简单。我希望每天凌晨1点执行任务,本地实现是没问题的,但是,部署到服务器上却出现比预定的时间晚了12个小时才执行。
查看原因并解决问题
首先,本地可以执行说明,定时任务代码层面没有问题,,放到服务器上晚12个小时才执行,首先考虑的是时区问题,查看服务器时区没有问题,说明服务器时间是正常的,查看nohup.out日志信息,发现,日志时间正好比系统时间晚12个小时,似乎有点思路了,这就说明java代码在服务器上运行的过程中,所获取的时间不是系统时间,这应该是java运行环境的问题,也就是jvm的问题,通过网上的资源,也在服务器上各种配置时区,最后发现还是不起作用,仔细一想,如果项目的运行环境可以设置,将其设置成与系统(本地)时间一致,就可以解决问题了,于是通过https://blog.csdn.net/qq_31075763/article/details/90479946该资源获得解决的办法了,就是在服务启动的时候,就设置时区,再部署到服务器上时,发现问题解决。
总结
- 项目应用系统运行时间和服务器时间不一致;
- 查看服务器时间是否正确;
- 服务器时间正确,就说明项目应用系统的获取时间有问题;
- 查看项目运行过程中的日志,看是否与系统时间一致(很有可能不一致);
- 因为服务器的时间和本地的时间是一致的,所以就需要更改应用运行环境的时间(时区)设置了;
- 在启动类加一个设置项目运行时的时区,这是一种方法,应该还有其他的方法,还没实践,不过这种方法在应用多的时候就需要重复操作了。。。。也算是不足,希望有更好方法的可以讨论,,,