2011-07-06 73 views
3

我在我的主要配置是这样的:Grails的配置:包括其他配置文件

grails.config.locations = “文件:在grails-app /配置/ Jawr.groovy”。

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

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

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

谢谢。

+0

你是什么意思,它不起作用?当grails读入外部配置时,它将它合并到一个配置类中。所以它不需要存在于WAR中。 – Gregg

回答

0

在我的工作,我们的团队经常使用的系统属性,保存路径到配置文件(通常在运行应用程序的用户的主文件夹 - 为了权限)。这里

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

好吧,几件事:那我们手动的配置文件复制到该路径

要确定它的生产环境中,我们使用下面的代码Config.groovy中。

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

其次,grails-app目录只存在于Grails项目的源代码树中。解压后的WAR文件的结构更像是Grails源代码树的Web应用程序文件夹,具有WEB-INF,META-INF,js,图像等文件夹。

第三,您可能希望避免将您的webapp文件夹内的外部化配置文件。下次您部署应用程序时,该配置将被旧版本的应用程序清除。外部化配置的一个要点是,您可以重新部署而不必重新配置。

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

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

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

+0

该插件已弃用:它在安装过程中显示警告,即使我认为应该将此功能内置到Grails本身中。但是,您可以轻松地自己做同样的事情;见http://phatness.com/2010/03/how-to-externalize-your-grails-configuration/ – osa

0

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