1

我正在做的似乎是在 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 文件夹(在类路径中)并且它工作。但我不想每次都复制/创建我们的外部配置文件。在构建战争并部署应用程序后,是否可以将我的配置文件移动到正确的位置,这样我就不必在部署任何应用程序期间手动移动它?谢谢。

4

2 回答 2

0

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

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

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

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

Config.groovy    
grails.config.locations = AppEnv.instance.configLocations
于 2013-04-17T06:49:04.650 回答
0

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

这取决于您现有流程的手动方式...

让我们想象一下:

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