Jodd Props - 超強的配置文件(一)

什麼是 Jodd Props

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 文件採用UTF8 做爲默認編碼, 固然你也能夠指定其它的編碼。 可是無論設置了什麼編碼,Props將會一直使用ISO 8859-1編碼加載 Java自帶的Properties文件(後綴名是.properties)。this

刪除空白字符

區段名和屬性名將會刪除前後空白字符。屬性值也會這麼修建編碼

設置屬性值

支持兩種符號 (=) (:)url

快速附加屬性值

使用 += 可將屬性值附加到該屬性,注意:附加的值以英文逗號分隔code

註釋

單行註釋支持兩種符號:;#。也沒必要須是每行的第一個符號。xml

轉義

使用(\) 來轉義特殊字符(如, \# \\)。生命週期

多行的值

若是行末是(\), 下一行將繼續被包含在值裏面。(注: 換行不會被保留)開發

特殊字符

\\uXXXX 將會編碼成一個字符。\t, \r and \f 也是。

多行的值 2

可使用三個單引號(''')更方便的設置一個多行的值,(注: 換行將會被保留)

使用方法

很簡單. 簡單的說,都是交給Props 類。

<!-- lang: java -->
Props p = new Props();
p.load(new File("example.props"));
...
String story = p.getValue("story");

Props 能夠從多種類型導入(load)屬性: FileInputStreamString 或者 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個屬性, 其中有兩個屬性有兩套配置(developdeploy)沒有「基礎配置」

因爲區段只是屬性值的前綴,而且配置也能夠放在屬性值的中間, 因而,配置也能夠卸載區段名裏面 因而,上面的例子也能夠寫成:

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()

待續。。

相關文章
相關標籤/搜索