Configuration 覆盖application.properties文件中的grails.serverURL和特定于应用程序的grails.propname设置

Configuration 覆盖application.properties文件中的grails.serverURL和特定于应用程序的grails.propname设置,configuration,grails,configuration-files,Configuration,Grails,Configuration Files,我需要在运行时重写grails.serverURL,而无需重新生成应用程序的WAR文件。我在application.properties文件中尝试了各种设置grails.serverURL的方法,但无法使其正常工作 下面是Config.groovy的特定于环境的部分: environments { prod { grails.serverURL = "http://nonexistentserver.somecompany.com:8080" grails.a

我需要在运行时重写
grails.serverURL
,而无需重新生成应用程序的WAR文件。我在
application.properties
文件中尝试了各种设置
grails.serverURL
的方法,但无法使其正常工作

下面是
Config.groovy
的特定于环境的部分:

environments {
   prod
   {
      grails.serverURL = "http://nonexistentserver.somecompany.com:8080"
      grails.anotherappspecificURL = "xcc://user:password@server.somecompany.com"
   }
grails.serverURL=http://webserver1.somecompany.com:8080
grails.anotherappspecificURL=xcc://admin:xyzabc123@specificserver.somecompany.com
基本上,我们的
应用程序.properties
如下所示:

grails.env=prod
grails.war.deployed=true
app.grails.version=1.0.4
app.name=myapp
下面是我尝试覆盖设置的方法之一。这些在
Config.groovy
中定义:

environments {
   prod
   {
      grails.serverURL = "http://nonexistentserver.somecompany.com:8080"
      grails.anotherappspecificURL = "xcc://user:password@server.somecompany.com"
   }
grails.serverURL=http://webserver1.somecompany.com:8080
grails.anotherappspecificURL=xcc://admin:xyzabc123@specificserver.somecompany.com

如果您能在无需更改代码的情况下帮助实现此功能,我们将不胜感激

覆盖Config.groovy中的值的正确方法是使用外部属性文件,请参见:

在Config.groovy中指定外部属性文件,例如:

grails.config.locations = [ "classpath:app-config.properties"]
在属性文件(可存储在grails app/conf/中)中指定覆盖值:

grails.serverURL=http://webserver1.somecompany.com:8080

一旦部署了war,只要修改/WEB-INF/classes/app-config.properties中的属性文件并重新加载上下文,就可以随时更改serverURL。

这可能与此无关,但我注意到grails中缺少引号。serverURL

我发现外部化配置有点棘手(从Grails1.3.7开始)。您必须将文件放入
config.groovy

grails.config.locations << 'classpath:my-config-file.groovy'

您可以在

找到更多信息,我是从文档中得到的。问题是,它不起作用。我们的Config.groovy没有为grails.Config.location设置任何内容(已注释掉),因此我假设默认的外部属性文件是“application.properties”。似乎是这样的,因为我可以更改“grails.env”的设置,它会选择正确的“环境”配置是在Config.groovy中定义的。但是,我想在运行时启动时用其他东西覆盖这些设置,并且按照您指出的那样做不会对任何grails.settings产生任何影响。为了澄清我的原始帖子,最后的“代码”节位于application.properties文件中,而不是Config.groovy文件中,正如该代码节之前的注释所示。我相信application.properties包含的应用程序元数据没有与Config.groovy中包含的配置数据合并。因此,为了覆盖通常会设置的参数n Config.groovy您需要使用grails.Config.location,而不是application.properties。我知道您的上一个代码部分来自application.properties,我的回答是,这不是覆盖配置值的正确位置(即不起作用)。