Редактируемая человеком JSON-подобная или YAML-подобная конфигурация программы в Java

Существует ли библиотека Java, похожая на libconfig для C++, где файл конфигурации хранится в JSON-подобном формате, который может быть отредактирован людьми, а затем прочитан из программы?

Я не хочу использовать Spring или какой-либо из более крупных фреймворков. То, что я ищу, это небольшая, быстрая, автономная библиотека. я смотрел на java.util.Properties, но он не поддерживает иерархические / вложенные данные конфигурации.

4 ответа

Решение

Я думаю, что https://github.com/typesafehub/config это именно то, что вы ищете. Формат называется HOCON для оптимизированной человеком нотации объекта конфигурации, и это супер-набор JSON.

Примеры HOCON:

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

Проверьте другие инструменты на главной странице:

http://json.org/

Другие вопросы по тегам