2

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

这是环境特定部分Config.groovy

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

基本上,我们的application.properties样子是这样的:

grails.env=prod
grails.war.deployed=true
app.grails.version=1.0.4
app.name=myapp

以下是我尝试覆盖设置的方法之一。这些定义在Config.groovy

grails.serverURL=http://webserver1.somecompany.com:8080
grails.anotherappspecificURL=xcc://admin:xyzabc123@specificserver.somecompany.com

无需更改代码即可使其正常工作的任何帮助将不胜感激!

4

3 回答 3

3

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

http://grails.org/doc/1.1.x/guide/3.%20Configuration.html#3.4%20Externalized%20Configuration

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

grails.config.locations = [ "classpath:app-config.properties"]

在属性文件(可以存储在 grails-app/conf/)中指定覆盖值:

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

部署战争后,只要您需要更改 serverURL,只需修改 /WEB-INF/classes/app-config.properties 中的属性文件并重新加载上下文即可。

于 2009-06-25T19:11:48.157 回答
0

这可能不相关,但我注意到您的 grails.serverURL 中缺少引号

于 2011-10-20T19:10:54.363 回答
0

我发现外部化配置有点棘手(从 Grails 1.3.7 开始)。您必须将文件放入 grails.config.locations 中Config.groovy

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

但是如果不添加另一个文件,您将无法访问这些属性。我通过将一个新的配置文件放入grails-app/conf并将其添加到类路径中来使其工作,方法是将以下内容添加到scripts/Events.groovy.

eventCompileEnd = {
    ant.copy(todir:classesDirPath) {
      fileset(file:"${basedir}/grails-app/conf/SecurityConfig.groovy")
    }
}

您可以在https://stackoverflow.com/a/9789506/1269312找到更多信息

于 2012-03-21T15:26:29.553 回答