可以将基于闭包的配置实现为地图地图吗?
grails {
acme {
host = 'localhost'
poolSettings {
timeout = 5000
}
}
}
上面的配置是 grails 插件的约定。我们正在进行迁移,由于遗留限制,我们需要动态创建配置以消除对遗留代码的影响。
我从一个简单的配置开始:
grails.acme = [host:'localhost']
这适用于启动时的插件,所以我添加了一个嵌套地图:
grails.acme = [host:'localhost']
def poolProps = //do some work to get pool settings
grails.acme << [poolSettings:poolProps]
在启动时我很打印grails.acme
:
{
"host": "locahost",
"poolSettings": {
"timeout": 5000
}
}
它看起来很正常,但是在 acme 插件失败并出现以下错误后不久:
2014-09-27 23:27:07,460 [localhost-startStop-1] ERROR context.GrailsContextLoader - 初始化应用程序时出错:没有方法签名:AcmePlugin$_closure2_closure5_closure9 .doCall() 适用于参数类型:(grails.spring. BeanBuilder) 值:[grails.spring.BeanBuilder@7b067fd7] 可能的解决方案:doCall(java.lang.Object, java.lang.Object), call(), call([Ljava.lang.Object;), call(java. lang.Object), call(java.lang.Object, java.lang.Object), findAll() 消息:没有方法签名:AcmeGrailsPlugin$_closure2_closure5_closure9.doCall() 适用于参数类型:(grails.spring.BeanBuilder)值:[grails.spring.BeanBuilder@7b067 fd7] 可能的解决方案:doCall(java.lang.Object, java.lang.Object), call(), call([Ljava.lang.Object;), call(java.lang .Object), 调用(java.lang.Object, java.lang.目的)
我对此感到有些困惑,我认为这是不可能的,而且我不确定如何动态地处理基于闭包的约定。