Уменьшите количество конфигурационных файлов до минимума
Для большинства моих приложений я использую iBatis.Net для доступа к базе данных / моделирования и log4Net для регистрации. Для этого мне нужно несколько файлов *.config для каждого проекта. Например, для простого приложения мне нужны следующие файлы *.config:
- app.config ([AssemblyName]. [Extention].config)
- [AssemblyName].SqlMap.config
- [AssemblyName].log4Net.config
- [AssemblyName].SqlMapProperties.config
- providers.config
Когда эти приложения переходят из среды DEV в TEST в среды PRODUCTION, параметры, содержащиеся в этих файлах, меняются в зависимости от среды.
Когда количество файлов составляется из-за наличия 5-10 (или более) поддерживаемых исполняемых файлов на проект, рабочая нагрузка на команду инфраструктуры (те, кто выполняет развертывание в различных средах) становится довольно высокой. У нас также есть высокий риск пропуска одного из файлов конфигурации или опечатки в файле конфигурации.
Каков наилучший способ избежать этих рисков? Должен ли я объединить все файлы конфигурации в один файл? (возможно ли это с iBatis?) Я знаю, что с VisualStudio 2010 они вводят преобразования для этих файлов конфигурации, которые позволяют разработчику настраивать все параметры для различных сред, а затем динамически (в зависимости от запускаемой сборки) файлы конфигурации обновляются на правильные версии. ( VS 2010 - трансформации)
Спасибо за любую помощь, которую вы можете предоставить.
2 ответа
Другой способ - создать файлы конфигурации во время сборки или развертывания, используя что-то вроде скрипта AWK или XSLT в сочетании с одним файлом, содержащим определенные настройки для каждой среды.
ANT имеет плагины, которые позволяют это, другие инструменты сборки, вероятно, тоже делают или позволяют подключать их с помощью хорошо опубликованного API.
Например, у вас может быть файл шаблона, читающий что-то вроде
database.uri=@@dbUri
database.user=@@dbUser
database.credentials=@@dbCredentials
и для каждого окружения файла эти теги взяты из как
dbUri=jdbc:oracle:10.1.1.10:1224:ORCL
dbUser=Scott
dbCredentials=Tiger
Развертываемая среда должна быть, конечно, каким-то образом добавлена в сценарий сборки, но вам все равно придется это делать.
Вы можете изменить основной файл *.config (например, web.config или app.config), добавив разделы конфигурации
Я использую log4net, Active Record и Ciphersafe в одном из моих веб-приложений и в моем файле web.config.
<configuration>
...
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
<section name="cipherSafeConfigSection" type="Obviex.CipherSafe.AppConfigSectionHandler,CipherSafe" />
</configSections>
...
</configuration>
Тогда у меня есть раздел конфигурации для каждого, например, для log4net у меня есть
<configuration>
...
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\\TimeRegWeb.log"/>
<appendToFile value="true"/>
<datePattern value="yyyyMMdd"/>
<rollingStyle value="Date"/>
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true"/>
<levelMin value="DEBUG"/>
<levelMax value="FATAL"/>
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
...
</configuration>
Таким образом, у меня есть только 1 файл web.config. Затем я создал отдельный проект с именем ProjectFiles, который содержит все мои внешние сборки и файлы конфигурации. Затем, когда я делаю запрос на обновление моего решения для операционной стороны, я копирую соответствующий файл конфигурации (test или prod) с файлами веб-приложения.