是否存在类似于C ++的libconfig的Java库,其中配置文件以类似JSON的格式存储,可以由人类编辑,然后从程序中读取?
我不想使用Spring或任何更大的框架。我正在寻找的是一个小型,快速,独立的库。我查看了java.util.Properties
,但它似乎不支持分层/嵌套配置数据。
答案 0 :(得分:19)
我认为https://github.com/typesafehub/config正是您所寻找的。该格式称为 HOCON ,用于人工优化配置对象表示法,它是 JSON 的超集。
HOCON 也是有效的 JSON :
{
"foo" : {
"bar" : 10,
"baz" : 12
}
}
HOCON还支持标准属性格式,因此以下内容也是有效的:
foo.bar=10
foo.baz=12
我发现非常有用的功能之一是继承,这允许您进行图层配置。例如,库将具有reference.conf
,使用该库的应用程序将具有application.conf
。 application.conf
中的设置将覆盖reference.conf
中的默认值。
Standard Behavior用于加载配置:
便捷方法ConfigFactory.load()加载以下内容 (首先列出的是更高优先级):
- 系统属性application.conf(classpath上的所有资源都带有 这个名字)
- application.json(类路径上的所有资源都带有此 姓名)
- application.properties(类路径上的所有资源都带有此 姓名)
- reference.conf(具有此名称的classpath上的所有资源)
答案 1 :(得分:4)
我找到了这个HOCON示例:
my.organization {
project {
name = "DeathStar"
description = ${my.organization.project.name} "is a tool to take control over whole world. By world I mean couch, computer and fridge ;)"
}
team {
members = [
"Aneta"
"Kamil"
"Lukasz"
"Marcin"
]
}
}
my.organization.team.avgAge = 26
读取值:
val config = ConfigFactory.load()
config.getString("my.organization.project.name") // => DeathStar
config.getString("my.organization.project.description") // => DeathStar is a tool to take control over whole world. By world I mean couch, computer and fridge ;)
config.getInt("my.organization.team.avgAge") // => 26
config.getStringList("my.organization.team.members") // => [Aneta, Kamil, Lukasz, Marcin]
答案 2 :(得分:1)
Apache Commons Configuration API和Constretto似乎有些受欢迎,支持多种格式(不过提到JSON)。我个人从未尝试过,所以YMMV。
答案 3 :(得分:0)