Структура конфигурации Java [закрыто]

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

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

25.08.2008 08:17:54
В прошлом я также боролся с этим и, наконец, опирался на java.utils.Properties, конфигурацию Apache Commons, Google Guava и Maven, чтобы создать решение для настройки, близкое к нулю, которое мы фактически настраиваем для старых систем, но просто используем коробки для нового. Последняя итерация в Maven Central: github.com/sofdes/config-generation-maven-plugin
user1016765 24.06.2014 18:52:06
14 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

29
25.08.2008 08:23:22
Хотя свойства, по большей части, просты, как вы сказали, загрузка меньше. Проверьте javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
James McMahon 4.06.2009 19:26:19
+1 Для свойств, если вам нужны только пары ключ / значение. Как только вы начинаете нуждаться в списках или картах, настало время перейти к другому решению.
NateS 22.12.2009 23:35:26
Я предпочитаю ответ @ John - даже если вы используете свойства, важно иметь некоторую инфраструктуру, чтобы впоследствии вы могли переключать базовую реализацию, не переписывая весь свой код. stackoverflow.com/questions/25765/java-configuration-framework/...
ripper234 21.11.2010 09:52:24

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

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

Обновить

ОК. Это не совсем верно, три проекта Spring Java Configuration Project .

3
25.08.2008 09:30:26

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

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

2
25.08.2008 10:36:07

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

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

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

6
25.08.2008 14:09:17

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

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

server.host=myHost
server.url=http://${server.host}/somePath
42
6.05.2015 18:00:22
user1016765 24.06.2014 18:56:59

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

5
28.10.2008 06:53:48
Тогда я под «продвинутым» имею в виду «сделай сам»: да. Но я был больше нацелен на существующие рамки, а не на DIY. Но хорошая статья в любом случае.
Steen 12.05.2009 20:48:04

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

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

0
12.05.2009 18:31:04

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

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

0
16.06.2009 22:27:53
Некоторое время я пользовался настройками, но в Windows Vista это такая боль, я сейчас ищу что-то еще ...
dave4351 18.08.2009 01:06:02
API настроек довольно грубый. Кроме того, я видел, что он полностью потерпел неудачу в Linux из-за некоторых проблем с разрешениями. Помимо всего этого, Preferences не может заменить Properties, потому что он перемещает конфигурацию в центральное место. Это влияет на вас, если вы хотите, чтобы несколько экземпляров вашей программы работали на одном компьютере. Например, Preferences не является хорошим местом для хранения настроек для WAR.
NateS 22.12.2009 23:33:02

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

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

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

20
22.06.2010 12:32:08

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

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

1
22.12.2009 23:26:05

Пожалуйста, посмотрите на этот URL: http://issues.apache.org/jira/browse/CONFIGURATION-394

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

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

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

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

1
15.03.2010 13:23:26

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

1
23.05.2017 12:23:41

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

0
1.02.2012 21:34:46

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

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

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

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

5
31.08.2012 14:01:54