【问题标题】:Override grails.serverURL and application specific grails.propname settings in application.properties file在 application.properties 文件中覆盖 grails.serverURL 和应用程序特定的 grails.propname 设置
【发布时间】:2009-06-25 18:12:43
【问题描述】:

我需要在运行时覆盖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"
   }

基本上,我们的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

非常感谢您在无需更改代码的情况下使其工作的任何帮助!

【问题讨论】:

    标签: configuration grails configuration-files


    【解决方案1】:

    在 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 中的属性文件并重新加载上下文即可。

    【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

      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找到更多信息

      【讨论】:

        猜你喜欢
        • 2019-07-17
        • 1970-01-01
        • 2021-11-05
        • 2017-12-31
        • 2016-07-21
        • 2015-06-22
        • 1970-01-01
        • 2015-11-18
        • 2017-09-06
        相关资源
        最近更新 更多