【问题标题】:Reduce number of config files to as few as possible将配置文件的数量减少到尽可能少
【发布时间】:2010-12-13 22:45:43
【问题描述】:

对于我的大多数应用程序,我使用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 - transforms)

感谢您提供的任何帮助。

【问题讨论】:

    标签: visual-studio-2008 configuration log4net configuration-files ibatis.net


    【解决方案1】:

    您可以通过添加配置部分来更改主 *.config 文件(例如 web.config 或 app.config)

    我在我的一个 Web 应用程序和我的 web.config 中使用 log4net、Active Record 和 Ciphersafe

    <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 中创建了一个单独的项目,其中包含我所有的外部程序集和配置文件。然后,当我向运营方提出更新我的解决方案的请求时,我将相关的配置文件(测试或产品)与 Web 应用程序文件一起复制

    【讨论】:

      【解决方案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
      

      要部署的环境当然必须以某种方式提供给构建脚本,但无论如何您都需要这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 2018-12-22
        • 2023-03-29
        相关资源
        最近更新 更多