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



我的主配置如下:

grails.config。locations = ["file:grails-app/config/java .groovy"].

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

但是,在部署时(创建war存档),这不再工作了,因为文件"Jawr。"Groovy"不再保存在文件系统中(它应该只保存在war中)。

你有解决办法吗?如何将外部文件包含到grails主配置文件中?

谢谢。

好的,这里有一些东西

首先,因为你的配置路径上没有前导斜杠,这是一个相对于谁知道在哪里的路径。我在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

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

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

然后我把它放到/shared,然后修改:

//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:"**")
    }
}

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

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

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

本文建议允许用户将配置文件的位置指定为环境变量或java属性——这意味着您可以简单地在命令行中使用-D指定它。

最新更新