Grails 如何覆盖外部配置文件中的配置变量,以便更新依赖于该变量的变量?
How in Grails override config variable in external config file so that variables dependant on that variable are updated too?
我的 grails 应用程序中有一个外部和内部配置:
Config.groovy
root = "/home/baseConf"
test {
dir = root + "/testDir"
}
External.groovy
root = "/home/externalConf"
内部控制器我有:
println "${grailsApplication.config.root}"
println "${grailsApplication.config.test.dir}"
打印的内容:
/home/externalConf
/home/baseConf/testDir
我要打印的内容:
/home/externalConf
/home/externalConf/testDir
我应该怎么做才能通过在外部配置文件中交换这个基本变量(如上例所示)来更改 Config.groovy 中使用一个基本变量的许多变量?这样的事情甚至可能吗?
您需要更改 dir 变量(内部测试)。检查下面的代码。
test {
dir = "${-> root}/testDir"
}
此更改是必要的,因为您希望 dir 在调用时计算,而不是在加载 Config 时计算。这称为后期绑定(惰性求值)(请参阅此处 Ian Roberts 的回答:Reusing Grails variables inside Config.groovy)。
重要的是要注意它与 Groovy 语言(不是 Grails)有关。
一个急切的评估策略可以在下面看到:
def x = 1
def s = "The value of x is: ${x}"
println s //The value of x is: 1
x = 2
println s //The value of x is: 1
对于另一方,延迟评估策略将按需评估表达式(按需调用):
def x = 1
def s = "The value of x is: ${-> x}"
println s //The value of x is: 1
x = 2
println s //The value of x is: 2
我的 grails 应用程序中有一个外部和内部配置:
Config.groovy
root = "/home/baseConf"
test {
dir = root + "/testDir"
}
External.groovy
root = "/home/externalConf"
内部控制器我有:
println "${grailsApplication.config.root}"
println "${grailsApplication.config.test.dir}"
打印的内容:
/home/externalConf
/home/baseConf/testDir
我要打印的内容:
/home/externalConf
/home/externalConf/testDir
我应该怎么做才能通过在外部配置文件中交换这个基本变量(如上例所示)来更改 Config.groovy 中使用一个基本变量的许多变量?这样的事情甚至可能吗?
您需要更改 dir 变量(内部测试)。检查下面的代码。
test {
dir = "${-> root}/testDir"
}
此更改是必要的,因为您希望 dir 在调用时计算,而不是在加载 Config 时计算。这称为后期绑定(惰性求值)(请参阅此处 Ian Roberts 的回答:Reusing Grails variables inside Config.groovy)。
重要的是要注意它与 Groovy 语言(不是 Grails)有关。
一个急切的评估策略可以在下面看到:
def x = 1
def s = "The value of x is: ${x}"
println s //The value of x is: 1
x = 2
println s //The value of x is: 1
对于另一方,延迟评估策略将按需评估表达式(按需调用):
def x = 1
def s = "The value of x is: ${-> x}"
println s //The value of x is: 1
x = 2
println s //The value of x is: 2