我的主配置如下:
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
,然后将其放在文档中。还有一个插件可以处理这个问题。
我没有使用它,但是它的描述使它听起来像做了一些明智的事情。
见: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
指定它。