Jodd Props

Stella981
• 阅读 508

什么是 Jodd Props

Jodd Props 是对Java自带的properties 的增强,文法风格类似于ini文件,表现力丰富,比json/xml等配置更简单,更可读,更易使用。

Props 补充了很多JDK所需要的: 对UTF8的支持, 插值, 区段, 多配置, fully configurable... 等等! 配置可以保存在*.props 文件中, 也可以通过其他形式传入, 例如:字符串、File、InputStream 、Map等。而且, Props 兼容Java自带的properties.

基本文法.

以下是 props 文件的基本文法。具体用法可见附带的例子:

Jodd Props

UTF8 编码

props 文件采用UTF8 作为默认编码, 当然你也可以指定其它的编码。 但是不管设置了什么编码,_Props_将会一直使用ISO 8859-1编码加载 Java自带的Properties文件(后缀名是.properties)。

删除空白字符

区段名和属性名将会删除先后空白字符。属性值也会这么修建

设置属性值

支持两种符号 (=) (:)

快速附加属性值

使用 += 可将属性值附加到该属性,注意:附加的值以英文逗号分隔

注释

单行注释支持两种符号:;#。也不必须是每行的第一个符号。

转义

使用(\) 来转义特殊字符(如, \# \\)。

多行的值

如果行末是(\), 下一行将继续被包含在值里面。(注: 换行不会被保留)

特殊字符

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

待续。。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
35岁,真的是程序员的一道坎吗?
“程序员35岁是道坎”,“程序员35岁被裁”……这些话咱们可能都听腻了,但每当触及还是会感到丝丝焦虑,毕竟每个人都会到35岁。而国内互联网环境确实对35岁以上的程序员不太友好:薪资要得高,却不如年轻人加班猛;虽说经验丰富,但大部分公司并不需要太资深的程序员。但35岁危机并不是不可避免的,比如你可以不断精进技术,将来做技术管理或者
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这