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

标签 grails tomcat8

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

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

当我部署该应用程序(作为 war 文件)时,该应用程序的日期和时间会正确几天,然后突然间,该应用程序会感到困惑,并认为它属于GMT,而不是EST。

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

  • 我们有一份工作,每天在美国东部标准时间上午6:15运行,并通过
    电子邮件。这种情况会在几天后的正确时间发生
    部署,然后突然每日工作在凌晨1:15开始运行
    代替。
  • 使用g:formatDate显示的
  • 日期字段将改为显示GMT
    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/

    相关文章:

    spring-mvc - Spring MVC 4 文件上传无提示失败

    java - 无法联系本地主机 :8005. 关闭 tomcat 时 Tomcat 可能无法运行错误

    grails - 如何为grails插件配置log4j?

    grails - 默认情况下修剪域字段

    mysql - 删除表给出 "foreign key constraint fail"错误

    java - 如何修复 'HTTP Status 500 - Internal Server Error' 错误?

    java - 监控 Tomcat 进程 CPU 峰值

    java - 如何在 Tomcat 中设置自定义垃圾收集器算法

    rest - Grails,Spring Security和Angular JS-如何保护URL?

    jquery - 按名称搜索但按ID保存