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