Рекомендации по структуре конфигурации - PullRequest
1 голос
/ 06 апреля 2011

Мы начинаем работать над веб-приложением на основе пружины (для запуска на 20 JVM).Веб-приложение работает в различных средах (например, Dev, QA, test, Stress, Production).

Мы занимаемся разработкой инфраструктуры конфигурации для приложения с приведенными ниже целями разработки ...

Цели проектирования для платформы Framework

  1. Поддержка модели наследования:
    Если свойство config является статическим, его можно определить глобально и наследовать длявсе среды.Среды должны иметь возможность переопределять значение унаследованного свойства.
  2. Устранение избыточности:
    Нужно только искать в одном месте для просмотра, изменения и добавления свойств конфигурации.Это должно снизить риск пропуска файла при добавлении или изменении свойств.
  3. Возможность администрировать и поддерживать свойства во время выполнения.
    Должна иметь возможность изменять свойство в одной JVM в памяти с помощьюупростите эту возможность, сохранив это изменение при перезапуске JVM.
  4. Возможность отладки.
    Чтобы определить текущее состояние функциональных переключателей и т. д., вы сможете легко выгружать свойства изпамять (свойства «один ко многим»).
  5. Уменьшите вероятность того, что различные среды INT, QA, STRESS не синхронизированы и их трудно развернуть и поддерживать.
  6. Поддержка простоты разработки, а также процесс развертывания до производства.Это изменение не должно отрицательно влиять на способность местного разработчика быть эффективным в разработке.Напротив, это должно сделать это проще.

Есть ли какие-либо предложения / рекомендации по достижению такого рода конфигурационной структуры весной?

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

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

Так что в вашей среде разработки у вас будут вещи, специфичные для нужд разработчика (например, учетные данные локальной базы данных и т. Д.). То же самое для QA и производства. Вы создаете приложение один раз (обычно это делается вашим модулем сборки / сервером непрерывной интеграции), и оно просто загружает свою конфигурацию для среды, в которой оно было развернуто. Это отделяет все особенности от кодовой базы, которая удобна для хранения конфиденциальной информации, такой как пароли и ключи шифрования, в безопасном месте.

Если вы еще не знакомы с использованием Spring для подстановки свойств, посмотрите здесь:

PropertyPlaceholderConfigurer

0 голосов
/ 07 апреля 2011

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

То, что мы делаем для достижения большинства из этих требований, - это различение конфигурации, которая остается неизменной в разных средахиз конфига, который потенциально может варьироваться.Например, большая часть проводки вашего приложения будет оставаться постоянной, тогда как пароли, URL-адреса веб-служб и т. Д. Будут отличаться.(Обратите внимание, что иногда проводка приложения тоже будет меняться. Например, возможно, на вашем локальном устройстве разработчика вы используете локальную аутентификацию, но в других средах вы используете CAS.)

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

Где его экстернализировать?Настройте репозиторий контроля версий (config repo) с помощью своего любимого инструмента контроля версий, а затем создайте папки для различных сред.Поместите конфигурацию, специфичную для среды, в соответствующую папку, а затем настройте свои сценарии развертывания так, чтобы исходный файл конфигурации находился в правильной папке.

Эта схема довольно приятна.Вы получаете централизованное управление конфигурацией, которая помогает контролировать дрейф, а также обеспечивает возможность аудита, откат, поддержку диагностики и т. Д. Разветвите конфигурацию так же, как вы делали бы исходный код.

В частности, в отношении Spring 3.1 будет включатьподдержка того, что называется профилями, что, я думаю, позволяет адаптировать конфигурацию к конкретной среде.Я еще не смотрел на это, но это то, что я помню, слышал в SpringOne 2GX.

0 голосов
/ 07 апреля 2011

Я согласен с ответом Джеффа Холла, но вы также можете прочитать документацию для класса PropertyOverrideConfigurer.

Если классы PropertyPlaceholderConfigurer и PropertyOverrideConfigurer не удовлетворяют вашим потребностям, вы можете рассмотреть следующую двухэтапную модификацию / усовершенствование ответа Джеффа Холла.

Шаг 1. Мой Config4 * (произносится как "config 4 star") файл парсера конфигурационных файлов отвечает практически всем вашим заявленным требованиям, за исключением того, что он не интегрирован в Spring. Я предлагаю вам прочитать главы 2 и 3 «Руководства по началу работы с Config4 *», чтобы решить, может ли Config4 * быть полезен для вашего проекта. Если вы решите, что это может быть полезно, тогда ...

Шаг 2. Сделайте копию исходного кода класса Spring PropertyPlaceholderConfigurer и измените его, чтобы получить пары имя = значение из файла Config4 * вместо файла свойств.

Потенциальное преимущество этого двухэтапного предложения состоит в том, что вам не нужно будет поддерживать отдельные файлы свойств для каждой из ваших сред INT / QA / STRESS и / или для каждой из ваших 20 JVM. Вместо этого возможности Config4 * для «адаптируемой конфигурации» позволят вам поместить значения конфигурации времени выполнения для всех этих сред и JVM в один файл конфигурации.

...