Стратегия консолидации файлов конфигурации веб-приложения Java для нескольких развертываний - PullRequest
0 голосов
/ 01 апреля 2011

Я прошу прощения, если это дубликат, я не смог найти ничего, что точно описывает то, что я хотел. Я создаю веб-приложение, которое имеет ряд различных свойств, которые необходимо изменить в зависимости от среды, в дополнение к числу .properties файлов конфигурации, которые также необходимо изменить. Прямо сейчас у меня есть глобальное перечисление (DEVELOPMENT, STAGING и PRODUCTION), которое используется для определения того, какие строковые константы используются в приложении, а затем я использую кучу комментариев в файлах конфигурации для переключения между базами данных. серверы и т. д. Должен быть лучший способ сделать это ... В идеале я хотел бы иметь возможность сделать одно изменение в одном файле (большой блок комментария был бы хорош ...) для настройки этих конфигураций. Я видел этот пост , где ответом является использование JNDI, который мне действительно нравится, но мне кажется, что мне нужно было бы вызывать его из запускаемого сервлета или из bean-компонента, который инициализируется при запуске, чтобы использовать его для моих файлов конфигурации log4j или JDBC.

Кто-нибудь имеет какие-либо стратегии для решения этой проблемы?

Спасибо!

Ответы [ 4 ]

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

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

0 голосов
/ 17 октября 2011

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

http://commons.apache.org/configuration

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

Я предполагаю, что ваши файлы свойств состоят из пар 95% имя = значение , которые идентичны во всех средах развертывания и 5% пар имя = значение это изменение из одной среды развертывания в другую.

Если это предположение верно, то вы можете попробовать что-то вроде следующего псевдокода.

void generateRuntimeConfigFiles(int deploymentMode)
{
    String[] searchAndReplacePairs;

    if (deploymentMode == Constants.PRODUCTION) {
        searchAndReplacePairs = ...
    } else if (deploymentMode == Constants.STAGING) {
        searchAndReplacePairs = ...
    } else { // Constants.DEVELOPMENT
        searchAndReplacePairs = ...
    }
    String[] filePairs = new String[] {
        "log4j-template.properties", "log4j.properties",
        "jdbc-template.properties",  "jdbc.properties",
        "foo-template.xml",          "foo.xml",
        ...
    };
    for (int i = 0; i < filePairs.length; i += 2) {
        String inFile = filePairs[i + 0];
        String ouFile = filePairs[i + 1];
        searchAndReplaceInFile(inFile, outFile,
                               searchAndReplacePairs);
    }
}

Ваше приложение вызывает generateRuntimeConfigFiles() до инициализации чего-либо еще, что может зависеть от свойств / файлов XML.

Теперь единственная проблема, с которой вам приходится сталкиваться, это как сохранить и получить различные настройки для searchAndReplacePairs. Возможно, вы могли бы получить их из файлов с именами, такими как production.properties, staging.properties и development.properties.

Если вышеуказанный подход вам нравится, напишите мне исходный код searchAndReplaceInFile(), чтобы избавить вас от необходимости заново изобретать колесо. Вы можете найти мой адрес электронной почты в поле «Информация» в моем профиле Stackoverflow.

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

Мы храним все наши значения конфигурации по умолчанию в одном файле XML. Во время развертывания мы применяем исправление XML (RFC-5261) со значениями, специфичными для среды.

http://tools.ietf.org/html/rfc5261 http://xmlpatch.sourceforge.net/

...