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

待续。。

相关文章
相关标签/搜索