Java configuration framework [закрыто]


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

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

14 72

14 ответов:

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

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

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

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

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

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

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

вот различные варианты:

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

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

Настройки Общин

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

Если вы не делаете ничего сложного, я бы придерживался файлов properites.

Если вы хотите сделать что-то продвинутое (и типобезопасное), вы можете взглянуть на это:http://www.ibm.com/developerworks/java/library/j-configint/index.html

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

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

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

для тех, кто заинтересован Концептуальная Исследовательская Работа.

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

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

обновление

ОК. Это было не совсем верно, три-это Spring Java Configuration Project.

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

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

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

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

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

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

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

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

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

Я только что опубликовал краткий бит код об использовании класса Springpathresource в качестве альтернативы IoC. ClassPathResource позволяет размещать файлы свойств в любом месте пути к классу (например, все в одном месте или в качестве одноранговых узлов кода, который они настраивают. Мой пример просто использует java.утиль.Свойства, так что вы можете использовать открытый текст "имя=значение" стиль или его формат XML.

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

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

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

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

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