2009-09-04 30 views
30

創建從屬性文件中讀取配置參數的Tomcat部署的接受實踐是什麼?配置Tomcat以使用屬性文件加載數據庫連接信息

能夠提供WAR文件並指定客戶端只需要在特定目錄中創建或編輯屬性文件將會很好。這是一種有點經常的做事方式嗎?有沒有比這更好的方法?

回答

14

我們經常通過提供一個WAR和一個上下文XML文件來分發web應用程序,該文件被放置在您的tomcat/conf/Catalina/localhost目錄中,並且可以從任何路徑加載webapp。有一個參考文件here。這提供了以下優點:

  • 上下文參數可以在這裏配置,以及通過Web應用
  • 數據源可以定義讀取和這裏配置
  • 的WAR實際上可以在文件系統中,這意味着如果在任何地方生活Tomcat升級,只有這個單獨的配置文件需要移動到新的Tomcat安裝,Web應用程序和任何其他文件可以留在他們的位置

如果你真的想要一個屬性文件,你可以設置一個參數在上下文X中ML文件指向您的屬性文件,讀取ServletContextListener中的參數,然後讀入屬性文件。

9

我們處理這個問題的方法:

  1. 有客戶在GlobalNamingResources創建一個連接池使用我們商定一個資源名稱。數據庫驅動程序需要位於Tomcat的類路徑中。
  2. 我們的戰爭文件包括具有ResourceLink鏈接到在步驟1中

配置的連接池一個META-INF/context.xml的文件,這是一個小更前面的工作不是簡單地改變環境。 XML連接信息直接,但隨着時間的推移它應該得到回報。一個開發服務器將被設置爲它的GlobalNamingResources指向開發,並且一個測試服務器指向測試等。然後,可以將相同的WAR文件複製到每個服務器而不用編輯任何東西。

這不是使用屬性文件,但我認爲它達到了相同的目標。允許用戶/客戶設置數據庫連接信息。 GlobalNamingResource的

例子:

<Resource name="jdbc/dbconnection" auth="Container" 
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" 
url="jdbc:oracle:thin:@127.0.0.1:1546:SID" 
username="scott" password="tiger" maxActive="8" maxIdle="4" 
validationQuery="select 1 from dual" 
testOnBorrow="true"/> 

戰爭文件context.xml中的示例:

<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true"> 
    <ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection" 
      type="javax.sql.DataSource"/> 
</Context> 
7

這是一個很好的做法存儲配置了戰區。在我們的WAR中,我們有一個默認位置來查找屬性文件。如果缺省值不起作用,則可以通過在conf/Catalina/[host]目錄中的上下文片段中定義的JVM參數或上下文參數來指定位置。例如,

<Context docBase="/server/app.war" 
    swallowOutput="true" unpackWAR="false" useNaming="false"> 

    <Parameter name="config-file" value="/config/db.properties" override="true" /> 
</Context> 
相關問題