我正在CentOS服务器上运行大型Grails应用程序。
服务器设置为EST(GMT-5)。
当我部署该应用程序(作为 war 文件)时,该应用程序的日期和时间会正确几天,然后突然间,该应用程序会感到困惑,并认为它属于GMT,而不是EST。
这会导致域对象上的日期不正确,还会导致Quartz作业在错误的时间运行。例如:
电子邮件。这种情况会在几天后的正确时间发生
部署,然后突然每日工作在凌晨1:15开始运行
代替。
EST,但日期本身的小时/分钟/秒却没有
更改,因此每次保存记录时,日期最终都会是
向前推进了五个小时。
当前正在运行Grails版本2.4.4,Apache Tomcat / 8.0.15,OpenJDK 1.8.0,但是我们在grails,Tomcat 7和Java 7的各种2.3.x版本中遇到了相同的行为。
我仍然不确定这是Grails问题还是Tomcat问题。任何想法如何解决它将不胜感激。
最佳答案
事实证明,问题出在代码中某处使用TimeZone.setDefault()
。
像这样在应用程序中的任何地方修改全局状态都是非常危险的!
即使在代码中使用,乍一看也受到old = current(); set(new); dostuff(); set(old)
之类的东西的“保护”,因为它会在很短的时间内进行更改,并且它周围的错误变得更加晦涩,因此很可能会中断(但很难捕获)。剩下的事情将由异常(exception)处理。
关于grails - Tomcat上的Grails应用在部署后几天忘记了时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673860/