Tomcat上的Grails应用程序在部署后几天忘记了时区

时间:2015-02-23 12:29:35

标签: grails tomcat8

我在CentOS服务器上运行一个大型Grails应用程序。

服务器设置为EST(GMT - 5)。

当我部署应用程序(作为战争文件)时,应用程序的日期和时间将正确几天,然后突然应用程序变得混乱并认为它是GMT,而不是EST。

这会导致域对象上的日期不正确,并导致Quartz作业在错误的时间运行。例如:

  • 我们有一份工作,每天早上6:15在美国东部时间上午运行并发送报告 电子邮件。这发生在几天之后的正确时间 部署,然后突然每天的工作在凌晨1点15分开始运行 代替。

  • 使用g:formatDate显示的日期字段将显示GMT EST,但日期中的小时/分钟/秒本身并没有 更改,因此每次保存记录时,日期最终都会存在 推进了五个小时。

目前正在运行Grails版本2.4.4,Apache Tomcat / 8.0.15,OpenJDK 1.8.0,但我们遇到了与各种2.3.x版本的grails,Tomcat 7和Java 7相同的行为。

我仍然不确定这是Grails问题还是Tomcat问题。任何想法如何解决它将不胜感激。

1 个答案:

答案 0 :(得分:1)

事实证明问题是在代码中某处使用了TimeZone.setDefault()

在应用程序的任何地方修改这样的全局状态是非常危险的!

即使在代码中使用,乍看之下由old = current(); set(new); dostuff(); set(old)之类的东西“保护”,也可能会破坏(但更难捕获)因为它会在短时间内发生变化并出现错误它周围变得更加模糊。例外情况将会完成......