Конфигурация Java

Я в процессе отсеивания всех жестко заданных значений в библиотеке Java и задавался вопросом, какая структура будет лучшей (с точки зрения конфигурации нуля или близкой к нулю) для обработки конфигурации во время выполнения? Я бы предпочел файлы конфигурации на основе XML, но это не обязательно.

Пожалуйста, ответьте только, если у вас есть практический опыт работы с каркасом. Я не ищу примеров, но опыт...

Ответ 1

Если ваши жестко заданные значения являются просто парами ключ-значение, вы должны посмотреть java.util.Properties. Это намного проще, чем xml, проще в использовании и умозрительно тривиально реализовать.

Если вы работаете с Java, а данные, которые вы храните или извлекаете с диска, моделируются как пара ключевых значений (что похоже на то, что оно есть в вашем случае), то я действительно не могу представить лучшего решения.

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

Конечно, это имеет огромное преимущество в том, что не нужно использовать библиотеки сторонних разработчиков.

Ответ 2

Apache Commons Configuration отлично работает. Он поддерживает конфигурацию, хранящуюся в широком диапазоне форматов на бэкэнд, включая свойства, XML, JNDI и т.д. Он прост в использовании и расширяется. Чтобы получить максимальную гибкость, используйте factory, чтобы получить конфигурацию и просто используйте Конфигурационный интерфейс после этого.

Две функции конфигурации Commons, которые различают его по прямому файлу свойств, это то, что он поддерживает автоматическое преобразование в обычные типы (int, float, String arrays) и поддерживает замену свойств:

server.host=myHost
server.url=http://${server.host}/somePath

Ответ 3

Вот несколько вариантов:

Возможно, вы захотите прочитать Сравнение конфигурации Commons с JFig и JConfig и Настройка ваших приложений с помощью JFig для получения некоторых отзывов от разных пользователей.

Лично я использовал jConfig, и это был хороший опыт.

Ответ 4

Конфигурация сообществ

Мы используем это. Только файлы свойств гораздо проще обрабатывать, но если вам нужно представить более сложные конфигурации данных, это может сделать и прочитать ваши файлы свойств.

Если вы не делаете ничего сложного, я буду придерживаться соответствующих файлов.

Ответ 6

Инструмент утилиты интеллектуальных параметров (InPUT, страница) позволяет экпортировать практически любое (жестко закодированное) решение в качестве параметра в файл конфигурации, основанный на XML. Он был начат в начале 2012 года в ответ на воспринимаемые недостатки существующих инструментов настройки в отношении общности и разделения проблем.

InPUT, вероятно, более эффективен, чем требует большинство случаев использования, поскольку он позволяет использовать независимую формулировку языка программирования экспериментальных данных (ввода-вывода) с такими функциями, как определение complex дескриптор к сопоставлениям классов, или рандомизированная конфигурация нереста и валидация на основе предопределенных диапазонов значений (для тестирования и исследования, например, для моделирования в Монте-Карло). Вы можете определить параметры с дополнительными параметрами, относительные ограничения на значения параметров (числовой параметр a > param b) и т.д.

Его все еще в бета-версии, но довольно стабильный, я использую его для своих исследований, для конфигурации и документации экспериментов и для целей обучения. Как только он доступен для других языков (адаптер С++ в трубе), другие исследователи/практики могут повторно использовать дескрипторы, выполняющие их реализации тех же алгоритмов на С++ (используя концепцию преобразования кода). Таким образом, экспериментальные результаты могут быть проверены/программы могут быть легко перенесены. Документация по-прежнему находится в рабочем процессе, но на странице доступно несколько примеров. InPUT - это программное обеспечение с открытым исходным кодом.

Для заинтересованных лиц Концептуальный исследовательский документ.

Ответ 7

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

К сожалению, у меня нет опыта работы с конкретными библиотеками для Java (кроме тех, которые я написал сам), но любые указатели будут оценены.

Обновление

OK. Это было не совсем так, три - Spring Проект конфигурации Java.

Ответ 8

I написал об этом пару недель назад и пришел к выводу, что XML является одним из наиболее широко используемых обозначений.

Это лучшее? Я так не думаю, мне очень нравится JSON, но инструментарий по-прежнему не соответствует XML, поэтому я думаю, нам нужно подождать и посмотреть.

Ответ 9

Вы можете попробовать YamlBeans. Таким образом, вы пишете все классы, которые хотите сохранить ваши данные конфигурации, затем вы можете автоматически писать и читать их в YAML и из него.

YAML - это формат данных, читаемых человеком. Он обладает большей выразительностью, чем java.util.Properties. Вы можете иметь списки, карты, привязки, типизированные данные и т.д.

Ответ 10

Пожалуйста, взгляните на этот URL:    http://issues.apache.org/jira/browse/CONFIGURATION-394

Структура конфигурации, которую мы ищем, является чем-то поверх конфигурации Apache Commons и должна поддерживать Concurrency проблемы, проблемы JMX и большинство магазинов (например, файл .properties,.xml файлы или PreferencesAPI).

Что предлагает команда weblogic в "Консоли администрирования", через которую вы можете получать транзакционные (атомные) обновления в конфигурациях, чтобы зарегистрированные зарегистрированные слушатели были уведомлены.

Ребята из Apache настаивают на том, что этот проект выходит за рамки Commons Configuration, возможно!

Я прикрепил простую конфигурационную структуру, посмотри, пожалуйста.

Ответ 11

Я только что опубликовал короткий код об использовании Spring ClassPathResource в качестве альтернативы IoC. ClassPathResource позволяет размещать файлы свойств в любом месте пути к классам (например, все в одном месте или как одноранговые узлы для кода, который они настраивают). В моем примере используется только java.util.Properties, поэтому вы можете использовать стиль "имя = значение" в текстовом формате или его формат XML.

Ответ 12

Свойства файлов очень простые, если вам нужно что-то более функциональное, вы можете отформатировать некоторые ваши файлы конфигурации в виде классов Java. Они могут быть размещены в другом пакете/модуле и могут быть предварительно скомпилированы или загружены во время выполнения с помощью библиотеки BeanShell.

Примечание. В простейшем случае (предварительно скомпилированном) вам не нужны дополнительные библиотеки.

Ответ 13

Что касается предложений по использованию java.util.Properties - начиная с jdk 1.5, API предпочтений (java.util.prefs) представляется предпочтительной альтернативой использованию API свойств.

Причины: повышенная масштабируемость, нейтральность на стороне и т.д.

Ответ 14

Вы могли бы взглянуть на недавно объявленный tools4j-config, чья миссия заключается в том, чтобы вы могли легко обрабатывать конфигурацию во время выполнения.