如果#setDefault(TimeZone timezone)
是由相同的應用服務器上運行使用JDK 1.6時區#setDefault()與JDK 1.6
正如TimeZone #setDefault changes in JDK 6討論併發應用程序調用,會發生什麼應用程序服務器上調用現在變爲VM寬,這可有可怕的後果。
如果您不管理應用程序服務器,如何確保TimeZone不會更改?
如果#setDefault(TimeZone timezone)
是由相同的應用服務器上運行使用JDK 1.6時區#setDefault()與JDK 1.6
正如TimeZone #setDefault changes in JDK 6討論併發應用程序調用,會發生什麼應用程序服務器上調用現在變爲VM寬,這可有可怕的後果。
如果您不管理應用程序服務器,如何確保TimeZone不會更改?
阻止TimeZone.setDefault(...)
具有VM範圍效應的方法是確保SecurityManager
不會賦予應用程序寫入"user.timezone"
系統屬性的權限。
要理解爲什麼,請看the source code。
現在,可以說依靠沒有記錄在Javadoc中的行爲有點調皮。但在這種情況下,我們沒有多少選擇。此外,鑑於這種特定方法的歷史,Sun/Oracle工程師不太可能再次改變其行爲。
是的,我也建議使用喬達時間,但不幸的是它不可能(在我的情況下)。默認的應用程序服務器是否使用'SecurityManager'並避免設置'user.timezone'? – codevour 2010-04-20 09:45:58
@chrsk:說實話,我不知道。即使沒有使用喬達時間,您也可以嘗試確保您始終在相關時指定時區。你能否提供關於你的情況的更多細節? – 2010-04-20 09:53:09