2012-07-05 28 views
2

我使用了以下內容:PropertyPlaceholders在web.xml

  • 春3.1
  • 的Java EE 6(GlassFish的3.1.2)
  • Maven的項目構建等
  • 螞蟻直播部署

我們有一堆工作環境:DEV,UAT,TRAINING,PROD等。在我們的培訓環境中,我已經爲我申請了一個會話時間ut至8小時。在所有其他環境中爲2小時。我喜歡做的只是在web.xml中使用一個屬性佔位符。但我不認爲這是可能的:

<session-config> 
    <session-timeout>${session.timeout}</session-timeout> 
</session-config> 

我想到的解決方案是:

  1. 使用Maven過濾 - 我真的不希望這樣做。這將意味着一場單獨的培訓戰爭。
  2. web.xml中刪除會話超時,並且將培訓中的GlassFish配置爲在8小時後超時 - 我不太喜歡這一點,因爲我希望保持我們所有的環境都是純同步的。
  3. 在一些初始化代碼中手動設置。呸。

我應該提到,我們使用<env>.properties文件來配置web-app。使用VM參數選擇屬性文件。

任何人都可以想到另一個更好的解決方案嗎?

在此先感謝, 米爾。

回答

0

如果你可以在一些初始化代碼中設置它,那麼你就可以從彈簧中獲取它。 web.xml是第一個被讀取的東西,所以不需要預處理。

那麼,爲什麼不創建一些「手動初始化代碼」,它隨着從春季加載會話超時的戰爭部署而來。

+0

是的,這是我在編號3時想到的。希望避免這種情況,但是我更喜歡其他兩種選擇。也就是說,如果我花一些時間爲GlassFish本身(應用程序服務器而不是Web應用程序)創建一些自動部署腳本,那麼這是我的首選選項。 – Muel

0

看看這個question上如此,還有可以有兩種方式,但不知道 -

  1. 你可以爲每個環境不同的web.xml文件,並與相應的web.xml中建立war文件。這是完全可能的。

  2. 您可以使用上述鏈接中顯示的自定義HttpSessionListener。雖然它有從硬編碼值進行設置會話時間,我會嘗試從servlet上下文訪問初始化參數一樣

    Session().getServletContext().getInitParameter("paramName"); 
    

,並規定初始化與不同的環境不同的會話超時值PARAMS。我沒有測試這個代碼,所以不知道你是否得到上下文參數。

+0

感謝您的評論。您的號碼1等同於使用Maven過濾。 (一般來說)不好的做法是每個環境都有不同的WAR。關於你的號碼2,這與春季相結合是我對我的號碼3的想法! – Muel