2012-05-21 75 views
1

有許多方法可以將參數傳遞給Java應用程序。其中有:Java中的命令行參數vs文件屬性(* .properties)與系統屬性(-D)

  1. 命令行參數
  2. 屬性文件(properties樣式)
  3. 系統性能(通過-D選項傳遞)
  4. 系統環境變量

在意識形態上,當應該更喜歡反對其他人嗎? 例如,如果有許多參數傳遞給應用程序,是否有理由使用* .properties文件來支持命令行參數?或者,例如,可以輕鬆地從堆棧下的任何類訪問系統變量(與只能在main中訪問的CLI相反)。是否應該僅僅因爲易於訪問而喜歡通過CLI使用系統屬性?

+0

除了這兩個答案:你也可以結合所有這些。例如,你可以隨着實力的增強,首先檢查一個配置文件,然後檢查一個環境變量,最後是一個開關。這樣,您可以通過本地開關或環境變量覆蓋全局應用程序配置。 –

回答

2

取決於部署需要回答其中的一些問題。

命令行參數:當您有其他進程產卵您的應用程序,並且您想要從調用進程中控制這些參數時很好。 CRON就是一個例子。

文件:我不喜歡ini風格......你被困在Windows上。如果你想要一些非常簡單的東西,可以使用Properties類加載.properties文件。或者你可以使用XML。文件也給你選擇文件的位置,相對於應用程序很適合部署,有些人也喜歡把它們扔到某個地方,像/ etc

環境變量:儘管它使得部署更加複雜一些,如果環境影響應用程序的參數,我只會使用它。意思是,你的申請將採取不同的或需要基於操作系統,機器上的不同配置,等等

偏好是主觀的,可以依賴於應用程序,部署,系統的類型等

+0

小增加:文件用於存儲未及時更改的信息,即「靜態」值。命令行對於「動態」值更好。複雜的應用程序可能會混合使用這些樣式(取決於部署需求,正如@Nick所說的)。 –

0

好,進入配置,每個程序員都有自己的想法,如何正確的做...像往常一樣,它取決於很多事情。

我用這種方式處理這個選擇:如果它是類似於環境變量var(類似於$ PATH或$ SHELL),並且可以/必須由調用者設置(另一個程序或啓動腳本),它通過-D開關直接進入System.Properties。

如果是別的東西,那麼它會直接轉到屬性文件(實際上它的加載方式並不重要,有幾種方法可以做到這一點,每種方法都有優點和缺點,我最喜歡從classpath加載,但是隻是一個品味問題)。我試着在System.Properties中保留最小的,非常重要的東西,如果它是一個大配置,更好地使用屬性或XML或更好的數據庫表,但是它又取決於應用程序的複雜性(HelloWorld with一個數據庫是簡單的矯枉過正^^)。