在Grails中自动使用外部配置文件

时间:2013-04-16 21:37:40

标签: grails config

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

2 个答案:

答案 0 :(得分:0)

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

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

让我们想象以下内容:

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

答案 1 :(得分:0)

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

为了满足这些要求,我们提供了以下“级联”配置文件的设置:

  • .war文件中捆绑的common.properties并且始终加载
  • 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