Jodd Props 是對Java自帶的properties 的加強,文法風格相似於ini文件,表現力豐富,比json/xml等配置更簡單,更可讀,更易使用。java
Props 補充了不少JDK所須要的: 對UTF8的支持, 插值, 區段, 多配置, fully configurable... 等等! 配置能夠保存在*.props
文件中, 也能夠經過其餘形式傳入, 例如:字符串、File、InputStream 、Map等。並且, Props 兼容Java自帶的properties.json
如下是 props
文件的基本文法。具體用法可見附帶的例子:app
props
文件採用UTF8 做爲默認編碼, 固然你也能夠指定其它的編碼。 可是無論設置了什麼編碼,Props將會一直使用ISO 8859-1編碼加載 Java自帶的Properties文件(後綴名是.properties)。this
區段名和屬性名將會刪除前後空白字符。屬性值也會這麼修建編碼
支持兩種符號 (=
) (:
)url
使用 +=
可將屬性值附加到該屬性,注意:附加的值以英文逗號分隔code
單行註釋支持兩種符號:;
和#
。也沒必要須是每行的第一個符號。xml
使用(\
) 來轉義特殊字符(如, \#
\\
)。生命週期
若是行末是(\
), 下一行將繼續被包含在值裏面。(注: 換行不會被保留)開發
\\uXXXX
將會編碼成一個字符。\t
, \r
and \f
也是。
可使用三個單引號('''
)更方便的設置一個多行的值,(注: 換行將會被保留)
很簡單. 簡單的說,都是交給Props
類。
<!-- lang: java --> Props p = new Props(); p.load(new File("example.props")); ... String story = p.getValue("story");
Props
能夠從多種類型導入(load)屬性: File
、InputStream
、 String
或者 Properties
。而後調用 getValue()
來獲取屬性值, 返回值類型是一個字符串。
區段看起來和 Windows INI 文件的很類似。在 Props裏,區段其實是 接下來幾個屬性值的前綴,直到下一個區段,或者文件的末尾。
區段名使用[
]
包裹。區段名也能夠爲空
例如:
[users.data] weight = 49.5 height = 87.7 age = 63 [] comment=this is base property
等同於:
users.data.weight = 49.5 users.data.height = 87.7 users.data.age = 63 comment=this is base property
區段, 精簡了配置文件,同時更可讀
一般狀況下,一個應用將會部署在不一樣的環境中,因而,須要一些不一樣的配置。 例如一個應用的開發模式和生產模式。其中一個解決方案就是: 同一個屬性容許配多個不一樣的值。
Props 支持這種多配置. 配置能夠跟隨屬性名一塊兒設置。配置名使用 <
>
包裹。 一個值也能夠擁有多個配置。實際上,配置名能夠被放在屬性名的任意位置, 可是咱們強烈建議放在屬性名以後,這樣作更合理一些。
沒有設置配置的屬性數據「基礎配置」. 若是沒有找到指定配置的屬性值, Props 將會 從這些「基礎配置」裏尋找。這樣,配置能夠被視爲一個「不一樣的角度的視圖」或者 相同屬性集的「快照」
例如:
db.port=3086 db.url<develop>=localhost db.username<develop>=root db.url<deploy>=192.168.1.101 db.username<deploy>=app2499
注:develop-開發模式 deploy-生產模式 上面的例子設置了3個屬性, 其中有兩個屬性有兩套配置(develop
和 deploy
)沒有「基礎配置」
因爲區段只是屬性值的前綴,而且配置也能夠放在屬性值的中間, 因而,配置也能夠卸載區段名裏面 因而,上面的例子也能夠寫成:
db.port=3086 [db<develop>] url=localhost username=root [db<deploy>] url=192.168.1.101 username=app2499
當查找值的時候, 就能夠指定一個配置:
<!-- lang: java --> String url = props.getValue("db.url", "develop"); String user = props.getValue("db.username", "develop");
能夠一次同時指定多個配置。當一個值頂一個多個配置,他們之間的順序是很重要的 (補充:String user = props.getValue("db.username", "develop", "deploy");
) {: .attn}
固然也能夠只從「基礎配置」裏查找 - 使用getBaseValue()
方法。 「基礎配置」 不屬於其餘任何配置。
一般, 在應用的生命週期中之會激活一個配置。爲了方便每次不用都傳入配置文件 給 getValues()
。 Props 容許定義激活的配置。
激活的配置是調用getValue(String)
時默認使用的配置。
激活的配置能夠在 props
文件中設置 - 這樣當修改默認配置的時候就不用從新編譯 源代碼。 激活的配置使用一個特殊的名字@profiles
。 例如:
key1=hello key1<one>=Hi! @profiles=one
當在Java獲取值得時候:
<!-- lang: java --> String value = props.getValue("key1");
由於激活了配置'one
', 將會獲得 'Hi!
'。
固然激活的配置也能夠在Java裏設置,只須要調用方法setActiveProfiles()
。
待續。。