Первый в формате:
- Java файлы свойств подходят для пар ключ / значение (также автоматически обрабатывают символы новой строки). Степень структуры возможна при использовании «точечной нотации». Недостатком является то, что структура не позволяет легко перечислять объекты конфигурации верхнего уровня и работать в режиме детализации. Лучше всего использовать для небольшого набора часто настраиваемых параметров среды
- XML-файлы - довольно часто используются для более сложной конфигурации различных сред Java (особенно J2EE и Spring). Я бы посоветовал вам хотя бы узнать о Spring - в нем много идей, которые стоит знать, даже если вы решите не использовать его. Если вы решите свернуть свою собственную конфигурацию XML, я бы порекомендовал использовать XStream с настроенными параметрами сериализации или, если вам просто нужно проанализировать какой-либо XML, взгляните на XOM . BTW Spring также позволяет вам подключать ваш пользовательский язык конфигурации XML, но это относительно сложная задача . Конфигурация XML лучше всего использовать для более сложной «внутренней» конфигурации, которую конечный пользователь не видит и не настраивает.
- Сериализованные объекты Java - быстрый и простой способ сохранить состояние объекта и восстановить его позже. Полезно, если вы пишете графический интерфейс конфигурации, и вам все равно, будет ли конфигурация понятной человеку. Остерегайтесь проблем совместимости при разработке классов.
- Предпочтения - представленные в Java 1.4 , позволяют хранить печатный текст, числа, байтовые массивы и другие примитивы в хранилище, специфичном для платформы. В Windows это реестр (вы можете выбрать между / Software / JavaSoft / Prefs в HKLM или HKCU ). В Unix тот же API создает файлы под пользователем home или / etc . Каждый куст настроек можно экспортировать и импортировать в виде файла XML. Вы можете указать пользовательскую реализацию интерфейса PreferencesFactory , установив для свойства JVM "java.util.prefs.PreferencesFactory" имя класса реализации.
В целом использование API prefs может быть хорошим или плохим в зависимости от сценария вашего приложения.
- Если вы планируете запускать несколько версий одного и того же кода на одном и том же компьютере с разной конфигурацией, тогда использование API настроек является плохой идеей.
- Если вы планируете использовать приложение в ограниченной среде (домен Windows или жестко управляемый Unix-блок), вам необходимо убедиться, что у вас есть надлежащий доступ к необходимым ключам / каталогам реестра. Это застало меня врасплох не раз.
- Остерегайтесь перемещаемых профилей (реплицированных домашних папок), они компенсируют некоторые забавные сценарии, когда задействовано более одной активной машины.
- Настройки не так очевидны, как файл конфигурации в каталоге приложения. большинство сотрудников службы поддержки настольных компьютеров не ожидают и не любят их.
Относительно расположения файлов настроек, это опять же зависит от вашего приложения. Общее предложение:
- Упакуйте большинство ваших XML-файлов в JAR-файл приложения либо в корневой каталог, либо в каталог / META-INF. Эти файлы будут доступны только для чтения и считаются закрытыми для приложения.
- Поместите изменяемую пользователем конфигурацию в $ APP_HOME / conf . Он должен состоять в основном из файлов свойств и иногда из простого XML-файла (сериализация XStream). Эти файлы настраиваются как часть процесса установки и, как правило, не обслуживаются пользователем.
- В разделе user-home в точечной директории (т. Е. «~ / .Myapplication») хранится любая пользовательская конфигурация. Пользовательская конфигурация может переопределить конфигурацию в каталоге приложения conf . Любые изменения, сделанные внутри приложения, идут сюда (см. Также следующий пункт).
- Вы также можете использовать каталог $ APP_HOME / var для хранения любых других изменяемых данных, относящихся к этому экземпляру приложения (в отличие от пользователя). Еще одним преимуществом этого подхода является то, что вы можете перемещать и создавать резервные копии всего приложения и его конфигурации, просто копируя один каталог.
Это иллюстрирует некоторые стандартные методы управления конфигурацией. Вы можете реализовать их, используя различные библиотеки и инструменты, начиная с необработанного JRE, добавляя Spring / Guice или переходя на полный контейнер J2EE (возможно, со встроенным Spring)
Другие подходы к управлению конфигурацией:
- Использование нескольких базовых каталогов для запуска нескольких экземпляров приложения с использованием разных конфигураций.
- Использование облегченных реестров для централизованного управления конфигурацией
- Файл базы данных управления конфигурацией с централизованным управлением (CMDB), содержащий специфичные для хоста значения для каждого компьютера, каждую ночь rsync-ed для всех рабочих хостов. Приложение использует шаблонную конфигурацию и выбирает из CMDB во время выполнения на основе текущего имени хоста.