Редактируемая человеком JSON-подобная или YAML-подобная конфигурация программы в Java
Существует ли библиотека Java, похожая на libconfig для C++, где файл конфигурации хранится в JSON-подобном формате, который может быть отредактирован людьми, а затем прочитан из программы?
Я не хочу использовать Spring или какой-либо из более крупных фреймворков. То, что я ищу, это небольшая, быстрая, автономная библиотека. я смотрел на java.util.Properties
, но он не поддерживает иерархические / вложенные данные конфигурации.
4 ответа
Я думаю, что 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
,
Стандартное поведение для загрузки конфигов:
Вспомогательный метод ConfigFactory.load() загружает следующее (первые в списке имеют более высокий приоритет):
- системные свойства application.conf (все ресурсы в classpath с этим именем)
- application.json (все ресурсы в classpath с этим именем)
- application.properties (все ресурсы в classpath с этим именем)
- reference.conf (все ресурсы в classpath с этим именем)
Я нашел этот пример 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]
Ссылка: marcinkubala.wordpress.co m
Apache Commons Configuration API и Constretto, кажется, несколько популярны и поддерживают несколько форматов (хотя JSON не упоминается). Я лично никогда не пробовал, так что YMMV.
Есть библиотека Java для обработки файлов JSON, если это то, что вы ищете:
http://www.json.org/java/index.html
Проверьте другие инструменты на главной странице: