Grails 如何在Config.groovy中使用环境变量

Grails 如何在Config.groovy中使用环境变量,grails,groovy,Grails,Groovy,在Config.groovy中,我设置了几个环境变量: def appName = grails.util.Metadata.current.getApplicationName() def casUrl = "https://login.cas.server/cas" environments { development { grails.logging.jul.usebridge = true host.address = "12.34.56.78"

在Config.groovy中,我设置了几个环境变量:

def appName = grails.util.Metadata.current.getApplicationName()
def casUrl  = "https://login.cas.server/cas"
environments {
    development {
        grails.logging.jul.usebridge = true
        host.address = "12.34.56.78"
        host.port = "8080"
    }
    test {
        grails.logging.jul.usebridge = true
        host.address = "http://staging.server.somewhere.com/"
        host.port = ""
    }
    production {
        grails.logging.jul.usebridge = false
        host.address = "http://www.production.com"
        host.port = ""
    }
 }
我尝试在同一配置文件(Config.groovy)中使用这些值,如下所示:

但是,唯一需要解决的问题是appName变量,其他所有内容都为null。这是可以做到的吗?这看起来像是用在这篇文章在这里,但我似乎不能让他们解决

如果我做了类似的事情

def appName = grails.util.Metadata.current.getApplicationName()
def casUrl = "https://login.umt.edu/cas"
host.address = "MyAddress"
environments {
...
configSlurper解析CAS配置中的host.address,为什么我不能访问环境变量?

请参见基本配置下的答案

但是,使用点表示法后不能嵌套。换句话说,这是行不通的

所以试着像这样使用嵌套

foo {
   bar {
    hello = "world"
    good = "bye"
   }
}

在每个环境块内移动依赖于host.address和host.port的属性:

environments {
    development {
        grails.logging.jul.usebridge = true
        host.address = "12.34.56.78"
        host.port = "8080"
        grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/"
    }
    test {
        grails.logging.jul.usebridge = true
        host.address = "http://staging.server.somewhere.com/"
        host.port = ""
        grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/"
    }
    production {
        grails.logging.jul.usebridge = false
        host.address = "http://www.production.com"
        host.port = ""
        grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/"
    }
 }
您可以完全删除host.address和host.port变量:

environments {
    development {
        grails.logging.jul.usebridge = true
        grails.plugin.springsecurity.cas.serviceUrl = "http://12.34.56.78:8080/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://12.34.56.78:8080/${appName}/"
    }
    test {
        grails.logging.jul.usebridge = true
        grails.plugin.springsecurity.cas.serviceUrl = "http://staging.server.somewhere.com/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://staging.server.somewhere.com/${appName}/"
    }
    production {
        grails.logging.jul.usebridge = false
        grails.plugin.springsecurity.cas.serviceUrl = "http://www.production.com/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://www.production.com/${appName}/"
    }
 }

这样做,变量仍然没有得到解决。在我的URL中是
%5B%3A%5D%3A%5B%3A%5D%2fmy应用程序%2Fj\u spring\u cas\u security\u检查
config.groovy
文件中存在多少
环境
关闭。应该只有一个。
environments {
    development {
        grails.logging.jul.usebridge = true
        host.address = "12.34.56.78"
        host.port = "8080"
        grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/"
    }
    test {
        grails.logging.jul.usebridge = true
        host.address = "http://staging.server.somewhere.com/"
        host.port = ""
        grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/"
    }
    production {
        grails.logging.jul.usebridge = false
        host.address = "http://www.production.com"
        host.port = ""
        grails.plugin.springsecurity.cas.serviceUrl = "${host.address}:${host.port}/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=${host.address}:${host.port}/${appName}/"
    }
 }
environments {
    development {
        grails.logging.jul.usebridge = true
        grails.plugin.springsecurity.cas.serviceUrl = "http://12.34.56.78:8080/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://12.34.56.78:8080/${appName}/"
    }
    test {
        grails.logging.jul.usebridge = true
        grails.plugin.springsecurity.cas.serviceUrl = "http://staging.server.somewhere.com/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://staging.server.somewhere.com/${appName}/"
    }
    production {
        grails.logging.jul.usebridge = false
        grails.plugin.springsecurity.cas.serviceUrl = "http://www.production.com/${appName}/j_spring_cas_security_check"
        grails.plugin.springsecurity.logout.afterLogoutUrl = "${casUrl}/logout?url=http://www.production.com/${appName}/"
    }
 }