2015-02-23 73 views
0

我在CentOS服務器上運行大型Grails應用程序。Tomcat上的Grails應用程序在部署後幾天忘記時區

服務器設置爲EST(GMT - 5)。

當我部署應用程序(作爲戰爭文件)時,應用程序的日期和時間將是正確的幾天,然後突然該應用程序變得困惑,並認爲它是格林尼治標準時間,而不是美國東部時間。

這會導致域對象上的日期不正確,還會導致Quartz作業在錯誤的時間運行。例如:

  • 我們有每天6:15 16:00運行,並通過電子郵件 發出報告工作。這發生在 部署後幾天的正確時間,然後突然日常工作在1:15 AM 開始運行。

  • 日期字段中顯示相剋:formatDate將顯示GMT,而不是EST的 但時/分/秒日期本身不 變化,所以每次在保存記錄的日期最終被 推轉發五個小時。

當前運行的Grails 2.4.4,的Apache Tomcat/8.0.15,OpenJDK的1.8.0版本,但我們經歷了Grails的各種版本2.3.x版本,Tomcat的7和Java 7

相同的行爲

我還不確定這是Grails問題還是Tomcat問題。任何想法如何解決它將不勝感激。

+1

你可以排除,你的代碼中的「全局」狀態(例如'TimeZone.setDefault()')的東西搞亂了嗎? – cfrick 2015-02-23 12:38:46

+0

這就是問題所在!在應用程序的一個很少使用的區域有一個錯誤的TimeZone.setDefault()。 請將您的評論更改爲答案,我會將其關閉。謝謝。 – MT1 2015-02-23 14:43:19

回答

1

事實證明,問題是代碼中某處使用了TimeZone.setDefault()

像這樣在應用程序的任何位置修改全局狀態是非常危險的!

即使在代碼中使用,即乍一看被類似old = current(); set(new); dostuff(); set(old)這樣的「保護」的代碼,它很可能會中斷(但更難以捕獲),因爲它會在短時間內發生變化,更隱晦。例外將做其餘的...

相關問題