2008-08-25 90 views
72

我正在清除Java庫中的所有硬編碼值,並想知道什麼框架將是最好的(以零或接近零的配置方式)來處理運行時組態?我更喜歡基於XML的配置文件,但這不是必需的。Java配置框架

請只做回覆,如果你有一個框架的實際經驗。我不在尋找例子,但經驗...

+0

在過去,我也一直在努力,最終依靠java.utils.Properties,Apache Commons配置,Google Guava和Maven創建了一個接近零配置的解決方案,我們實際上爲舊系統配置了它,但是隻需使用開箱即可。最新的Maven Central迭代:https://github.com/sofdes/config-generation-maven-plugin – user1016765 2014-06-24 18:52:06

回答

29

如果你的硬編碼值只是簡單的鍵值對,你應該看看java.util.Properties。它比xml簡單很多,使用起來更容易,而且實現起來讓人頭腦麻木。

如果您正在使用Java,並且您從磁盤存儲或檢索的數據被建模爲鍵值對(它聽起來像是您的情況),那麼我真的無法想象一個更好的解決方案。

我已經使用屬性文件在較大的項目中對小包進行簡單配置,並將其作爲整個項目的更全局配置,並且我從來沒有遇到過任何問題。

當然這具有不需要任何第三方庫的利用的巨大好處。

+2

雖然屬性大部分都很簡單,但正如你所說的那樣,加載並不那麼簡單。查看http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html – 2009-06-04 19:26:19

+4

+1對於屬性,如果您只需要鍵/值對。一旦你開始需要列表或地圖,現在是時候轉移到不同的解決方案。 – NateS 2009-12-22 23:35:26

+0

我更喜歡@ John的答案 - 即使您使用屬性,重要的是要有一些框架,以便稍後切換底層實現而不必重寫所有代碼。 http://stackoverflow.com/questions/25765/java-configuration-framework/34397#34397 – ripper234 2010-11-21 09:52:24

3

我傾向於在大多數情況下使用java.util.Properties(或其他語言和框架中的類似的類)wrapped in an application-specific configuration class,但我對替代品或變體非常感興趣。特別是因爲如果涉及配置數據的圖形配置對話框或多個視圖,事情會變得有點棘手。

不幸的是,我沒有任何Java特定庫的經驗(除了我自己寫的),但任何指針,將不勝感激。

更新

確定。這不完全正確,三是Spring Java Configuration Project

2

wrote約兩週前,得出的結論是XML是最廣泛使用的符號之一。

這是最好的嗎?我不這麼認爲,我非常喜歡JSON,但是工具仍然不符合XML,所以我想我們必須等待和觀察。

6

Commons Configuration

我們正在使用這個。單獨使用屬性文件更容易處理,但是如果您需要表示更復雜的數據公共配置,則可以執行此操作並讀取屬性文件。

如果你沒有做任何複雜的事情,我會堅持適當的文件。

42

Apache Commons Configuration很好用。它支持在後端以各種格式存儲配置,包括屬性,XML,JNDI等等。它很容易使用和擴展。爲了獲得最大的靈活性,請使用factory來獲得配置,然後使用Configuration interface。是區分它在一條直線屬性的文件共享配置的

兩個特點是,它支持自動轉換爲普通類型(整型,浮點,字符串數組),它支持屬性替代:

server.host=myHost 
server.url=http://${server.host}/somePath 
+0

https://github.com/sofdes/config-generation-maven-plugin – user1016765 2014-06-24 18:56:59

0

屬性文件非常簡單,如果你需要更多的功能,你可以將一些配置文件格式化爲Java類。這些可以放置在不同的包/模塊中,並且可以在運行時使用BeanShell之類的庫進行預編譯或加載。

注意:在最簡單的情況下(預編譯),你不需要任何額外的庫。

0

關於使用java.util.Properties的建議 - 從jdk 1.5開始,Preferences API(java.util.prefs)似乎是使用Properties API的首選替代方法。

理由:增加可擴展性,後端中立等。

1

您可以試試YamlBeans。這樣你就可以編寫任何你想要保存配置數據的類,然後你就可以自動將它們寫入YAML並從YAML讀取它們。

YAML是一種人類可讀的數據格式。它比java.util.Properties更具表現力。你可以有列表,地圖,錨,輸入數據等

1

請看看這個網址: http://issues.apache.org/jira/browse/CONFIGURATION-394

我們正在尋找它的配置框架是Apache Commons Configuration也頂事並且必須支持併發問題,JMX問題和大多數商店(例如.properties文件,.xml文件或PreferencesAPI)。

什麼是weblogic團隊在'管理控制檯'上提供的是通過它可以對配置進行事務性(原子)更新,以便通知註冊的偵聽器。

Apache傢伙堅持說這個項目超出了Commons Configuration的範圍,也許吧!

我附上了一個簡單的配置框架,請看看。

1

我剛剛發佈了關於使用Spring的ClassPathResource作爲IoC的替代方法的一小段code。 ClassPathResource允許您將屬性文件放置在類路徑的任何位置(例如,所有位於同一個位置,或者與它們配置的代碼同行)。我的示例僅使用java.util.Properties,因此您可以使用純文本「name = value」樣式或者它的XML格式。

0

你可以看看最新公佈的tools4j-config,其使命是讓您可以輕鬆地在運行時處理的配置。

5

智能參數利用工具(輸入,page允許幾乎將任何(硬編碼)決策都作爲參數外部化到基於XML的配置文件中它已於2012年初作爲respons e涉及現有配置工具在普遍性和關注點分離方面的缺陷。

輸入可能比大多數使用情況需要更強大的,因爲它允許所述編程語言的實驗數據的獨立製劑(輸入 - 輸出),具有的功能,如複雜描述符的定義類的映射,或基於預定義值範圍進行隨機配置產卵和驗證(用於測試和研究,例如蒙特卡洛模擬)。您可以使用定義具有子參數的參數,參數值的相對限制(數字參數a>參數b)等。

它仍處於測試階段,但相當穩定,我將其用於我的研究,用於配置和實驗文檔,以及用於教學目的。一旦它可用於其他語言(管道中的C++適配器),其他研究人員/從業人員就可以重複使用C++中運行相同算法的描述符(使用代碼映射概念)。這樣,實驗結果可以驗證/程序可以更容易地遷移。該文檔仍在工作過程中,但頁面上有幾個示例可用。 InPUT是開源的軟件。

對於那些感興趣的,Conceptual Research Paper