Каковы возможные облегченные библиотеки конфигурации Java для обработки сложной конфигурации? [закрытый]

Мне нужно обработать относительно сложный набор параметров конфигурации для приложения java. Требования примерно:

  • вложенные значения конфигурации со списками, картами и т. д. - не просто пары ключ / значение
  • несколько файлов конфигурации, где более поздние файлы конфигурации могут разумно переопределять параметры из более ранних файлов конфигурации.
  • несколько ссылок на один и тот же настроенный элемент из разных места
  • наследуемые настроенные объекты, поэтому новый объект может скопировать конфигурацию из предыдущего объекта, может просто изменить определенные вещи
  • очень мало кода, необходимого для новых параметров конфигурации-оптимальным было бы просто добавить аннотацию @Configurable в поле или что-то подобное

теперь я знаю, что весна выполняет все это определенным образом. Однако у него есть некоторые недостатки, хотя и не фатальные:

  • Весна на самом деле не оптимизирован как язык конфигурации, так как он несколько больше обеспокоен инъекцией зависимостей
  • файлы конфигурации XML больше предназначены для отправки внутри файла JAR и не изменяются конечным пользователем, со всеми настраиваемыми свойствами, на которые ссылаются через отдельный файл свойств или аналогичный-где мне нужен файл конфигурации, чтобы быть полным и легко модифицируемым конечным пользователем
  • Весенняя конфигурация несколько утомительна, когда есть онлайн конфигурация обновляется без прекращения текущих подключений и когда должны быть отдельные примитивы проверки конфигурации, которые должны полностью проверять конфигурацию, но на самом деле ничего не делать

Итак, я спрашиваю, можете ли вы придумать какие-либо альтернативы, которые удовлетворяли бы моим требованиям?

Мне нравится YamlBeans, но ему не хватает нескольких функций.

5 ответов


вы уже посмотрели Конфигурация Apache Commons?


Это выглядит интересно, хотя я должен признать, что не использовал его:

http://owner.aeonbits.org


мы используем:Constretto на нашем проекте. Очень легкий и простой в использовании.


вы могли бы дать cfg4j попробовать. Он в основном ориентирован на распределенные приложения, но поддерживает большинство запрошенных функций.


для большинства требований я смог выполнить это со стандартными свойствами. Я завернул объект Properties в класс конфигурации, который читает файл свойств из:

  1. общий сосуд
  2. " приложение " jar / classpath
  3. файловая система (задается как свойство a-D для JVM)

код класса конфигурации таков, что свойства в приложении перезаписывают общие свойства и файловую систему свойства перезаписывают свойства уровня приложения.

конфигурация загружается как Spring bean и предоставляет свой внутренний объект Propertyplaceholderconfigurer, который позволяет далее $var замена в файлах XML Spring. Поскольку конфигурация является Spring bean, ее можно вводить там, где мне это нужно.

что-то вроде этого должно быть расширяемым для обработки файла JSON или YAML вместо файлов свойств, чтобы разрешить карты, список и т. д.