Каковы возможные облегченные библиотеки конфигурации Java для обработки сложной конфигурации? [закрытый]
Мне нужно обработать относительно сложный набор параметров конфигурации для приложения java. Требования примерно:
- вложенные значения конфигурации со списками, картами и т. д. - не просто пары ключ / значение
- несколько файлов конфигурации, где более поздние файлы конфигурации могут разумно переопределять параметры из более ранних файлов конфигурации.
- несколько ссылок на один и тот же настроенный элемент из разных места
- наследуемые настроенные объекты, поэтому новый объект может скопировать конфигурацию из предыдущего объекта, может просто изменить определенные вещи
- очень мало кода, необходимого для новых параметров конфигурации-оптимальным было бы просто добавить аннотацию @Configurable в поле или что-то подобное
теперь я знаю, что весна выполняет все это определенным образом. Однако у него есть некоторые недостатки, хотя и не фатальные:
- Весна на самом деле не оптимизирован как язык конфигурации, так как он несколько больше обеспокоен инъекцией зависимостей
- файлы конфигурации XML больше предназначены для отправки внутри файла JAR и не изменяются конечным пользователем, со всеми настраиваемыми свойствами, на которые ссылаются через отдельный файл свойств или аналогичный-где мне нужен файл конфигурации, чтобы быть полным и легко модифицируемым конечным пользователем
- Весенняя конфигурация несколько утомительна, когда есть онлайн конфигурация обновляется без прекращения текущих подключений и когда должны быть отдельные примитивы проверки конфигурации, которые должны полностью проверять конфигурацию, но на самом деле ничего не делать
Итак, я спрашиваю, можете ли вы придумать какие-либо альтернативы, которые удовлетворяли бы моим требованиям?
Мне нравится YamlBeans, но ему не хватает нескольких функций.
5 ответов
мы используем:Constretto на нашем проекте. Очень легкий и простой в использовании.
вы могли бы дать cfg4j попробовать. Он в основном ориентирован на распределенные приложения, но поддерживает большинство запрошенных функций.
для большинства требований я смог выполнить это со стандартными свойствами. Я завернул объект Properties в класс конфигурации, который читает файл свойств из:
- общий сосуд
- " приложение " jar / classpath
- файловая система (задается как свойство a-D для JVM)
код класса конфигурации таков, что свойства в приложении перезаписывают общие свойства и файловую систему свойства перезаписывают свойства уровня приложения.
конфигурация загружается как Spring bean и предоставляет свой внутренний объект Propertyplaceholderconfigurer, который позволяет далее $var
замена в файлах XML Spring. Поскольку конфигурация является Spring bean, ее можно вводить там, где мне это нужно.
что-то вроде этого должно быть расширяемым для обработки файла JSON или YAML вместо файлов свойств, чтобы разрешить карты, список и т. д.