Grails配置:包含另一个配置文件

时间:2011-07-06 20:36:17

标签: grails configuration config war

我的主配置中包含以下内容:

grails.config.locations = [“file:grails-app / config / Jawr.groovy”]。

使用grails run-app运行应用程序时,一切正常。

但是,在部署(创建war存档)时,这不再起作用,因为文件系统上不再保留文件“Jawr.groovy”(它应该只在战争中)。

你有解决方案吗?你是否将外部文件包含在grails主配置文件中?

感谢。

4 个答案:

答案 0 :(得分:1)

好的,这里有一些事情。

首先,因为您的配置路径上没有前导斜杠,这是一个相对于谁知道位置的路径。我在Tomcat中使用了这个,并且该路径最终与启动Tomcat服务器时的工作目录相关。如果启动Tomcat,关闭它,更改目录,然后再次启动它,您将获得两个不同的配置路径。

其次,grails-app目录仅存在于Grails项目的源树中。解压缩的WAR文件的结构更像是Grails源代码树的web-app文件夹,包含WEB-INF,META-INF,js,images等文件夹。

第三,您可能希望避免将外部化配置文件放在webapp的文件夹中。下次部署应用程序时,将使用旧版本的应用程序删除该配置。外部化配置的一个要点是,您无需重新配置即可重新部署。

一个简单但不太理想的解决方案是使用静态的完全限定路径,如/etc/yourApp/conf.groovy,然后将其放在文档中。还有一个插件可以处理这个问题。

http://www.grails.org/plugin/external-config

我没有使用它,但描述使它听起来像是明智的事情。

答案 1 :(得分:0)

请参阅:https://stackoverflow.com/questions/6341117/is-it-possible-that-grails-xxconfig-groovy-as-a-script-no-compile

  

然后我把它放进/共享,然后   修改:

//Config.groovy
grails.config.locations =
["file:shared/TZLibConfig.groovy"]

//BuildConfig.groovy
grails.war.resources = { stagingDir, args ->
    copy(todir: "${stagingDir}/WEB-INF/shared"){
        fileset(dir:"shared",includes:"**")
    }
}

答案 2 :(得分:0)

在我的工作中,我们的团队经常使用系统属性来保存配置文件的路径(通常在运行应用程序的用户的主文件夹中 - 出于特权的缘故)。然后我们手动将配置文件复制到该路径

为了确定它是生产环境,我们在Config.groovy中使用以下代码:

if (System.properties["${appName}.config.location"]) {
    grails.config.locations = ["file:" + System.properties["${appName}.config.location"]]
}

答案 3 :(得分:0)

This article建议允许用户将配置文件的位置指定为环境变量或java属性 - 这意味着您只需在命令行中使用-D指定它。除了所有其他方法之外,还可以使用它。