【问题标题】:Automating the use of external config files in Grails在 Grails 中自动使用外部配置文件
【发布时间】:2013-04-16 21:37:40
【问题描述】:

我正在做的似乎是在 Grails 中使用外部配置文件的最佳实践。

grails.config.locations = ["classpath:${appName}-config.groovy",
                           "file:./${appName}-config.groovy"]
if (System.properties["${appName}.config.location"]) {
   grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}

我在测试期间将配置文件放在根文件夹中,它可以工作。我在生产过程中手动将配置文件放在我们的 Tomcat 服务器的 lib 文件夹(在类路径中)并且它工作。但我不想每次都复制/创建我们的外部配置文件。在构建战争并部署应用程序后,是否可以将我的配置文件移动到正确的位置,这样我就不必在部署任何应用程序期间手动移动它?谢谢。

【问题讨论】:

    标签: grails config


    【解决方案1】:

    注意:我会编辑问题的标题以反映您关于自动化的实际问题。

    这取决于您现有的流程是如何手动...

    让我们想象一下:

    • 您有一个持续集成引擎,例如 Jenkins/Hudson 正在运行
    • scp/rsync成功构建后的外部配置文件
    • 您在成功构建后将应用程序部署到服务器(假设 projectName/scripts -> Tomcat、JBoss、Websphere 等下有一个 gant 部署脚本。)李>

    【讨论】:

      【解决方案2】:

      在项目中,我们需要为每个环境(本地、开发、测试、生产)提供不同的配置设置。虽然我们希望避免在不同服务器上更新配置文件的麻烦,但我们确实需要允许在特定环境中快速覆盖配置值。

      为了满足这些要求,我们对“级联”配置文件进行了以下设置:

      • common.properties 捆绑在 .war 文件中并始终加载
      • xxx.properties 文件捆绑在 .war 文件中,根据环境变量 (appEnv) 的值,加载或不加载这些配置文件中的任何一个(例如,如果环境变量为 yyy,则加载 yyy.properties )
      • 使用 appEnv 和 appLibRoot 环境变量可以找到本地文件系统上的配置文件。如果找到 appEnv.properties 对应的配置文件,则最后加载。

      在 Grail 应用程序的 startp 上加载配置文件只需在 Config.groovy 中提供配置文件位置列表即可。 AppEnv 类使用 appEnv 和 appLibRoot 环境变量创建配置文件列表,并检查哪些文件实际存在于类路径和文件系统中。

      Config.groovy    
      grails.config.locations = AppEnv.instance.configLocations
      

      【讨论】:

        猜你喜欢
        • 2014-03-14
        • 2012-02-14
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        相关资源
        最近更新 更多