2011-10-13 101 views
2

我遇到了一個小問題,從實現本身中解耦了我的JAVA程序使用的屬性文件的路徑規範。 該程序可能部署在具有不同目錄結構的多個位置,我不希望將路徑規範硬編碼到程序代碼中。避免屬性文件路徑規範的硬編碼

這是現在的情況。

我有一個文件夾服務器/ 裏面其中有2包芯/ &支持/(兩者都具有下面的許多子包)

我已經做得比較早是,無論對於一個屬性文件的路徑需要指定,我只是給了一個相對路徑,即屬性/ 在這種情況下,屬性文件需要在你從哪裏啓動程序。這在測試過程中起作用,當時我使用 「java」手動啓動程序。我會把屬性文件夾從我開始程序的地方。 但是在實際的情況下,這個程序將被一個腳本(ksh)自動啓動,該腳本在一個作業按計劃的時間間隔執行。

在這種情況下,給出相對路徑不起作用。我試圖將屬性文件放在腳本所在的文件夾中,但這也不起作用。

現在,我必須手動指定每個環境的路徑,重新編譯代碼併爲每個環境部署一個單獨的副本。 有沒有什麼辦法可以去掉這種耦合,只要有一個屬性文件的位置,而不管它需要被部署到什麼地方?

回答

3

使用System.Properties項指定路徑,然後在命令行通過

java -DmyProp=somepath -cp yourclasspath YourClass 

添加它,在你的應用程序,你可以用System.getProperty("myProp")檢索它,只是一定要加適量的測試和處理未找到屬性場景。

另一種做法是將道具放入jar中,然後使用LoadResource加載它們,這樣您只需在每個部署中部署不同的配置Jar,但我認爲System.setProperty方法是最快的。

+0

非常感謝,說幫我刪除最後的瓶頸在我的項目:) – angryInsomniac

0

通常一些客戶可能不喜歡在啓動應用程序時使用-D =。實際上,您還應該提供一個.sh/.bat腳本文件以及您的jar文件,以便客戶端可以雙擊腳本來運行您的應用程序。

在此腳本中,您可以聲明變量,您可以要求客戶端進行相應的配置。客戶端可以在文本編輯器中打開腳本文件並鍵入配置文件的路徑。

其他使用此腳本文件的方法是: 1)檢查系統環境中是否設置了YOUR_APP_NAME_CONFIG變量。如果是,則轉到步驟3或轉到步驟2 2)通過命令行詢問用戶配置文件的位置。檢查位置是否正確。如果正確,則使用配置文件的位置值設置環境變量YOUR_APP_NAME_CONFIG。 3)啓動您的應用程序

爲您的應用程序提供腳本文件可以讓您自由地爲自動化應用程序的環境配置做許多事情。 在您的應用程序中通過System.getProperty(「YOUR_APP_NAME_CONFIG」)獲取配置文件路徑。

這一切可能看起來像很多痛苦,但從客戶的角度來想。它的蛋糕走爲客戶端,他只是雙擊腳本來啓動您的應用程序和第一次啓動的應用程序腳本要求輸入一些,如果需要,然後您的應用程序是好去:)

0

我做的是通過另一類路徑參數與所述罐子調用..

java -cp classpath1;folder-where-propertiesfile-located Application.jar

和在應用中使用getClass().getClassLoader().getResourcesAsStream("properties-file");

這將自動獲取屬性文件形成適當的類路徑文件夾..

有了這個設置,我可以改變屬性的文件夾內的文件,並使用而無需重新歸檔的jar同一jar文件..