【发布时间】:2014-09-28 04:00:01
【问题描述】:
是否可以将基于闭包的配置实现为地图的地图?
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] 错误 context.GrailsContextLoader - 初始化应用程序时出错:否 方法签名:AcmePlugin$_closure2_closure5_closure9 .doCall() 适用于参数类型:(grails.spring.BeanBuilder) 值: [grails.spring.BeanBuilder@7b067fd7] 可能的解决方案: doCall(java.lang.Object, java.lang.Object), call(), 调用([Ljava.lang.Object;),调用(java.lang.Object), 调用(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(), 调用([Ljava.lang.Object;),调用(java.lang.Object), 调用(java.lang.Object, java.lang.Object)
我对此感到有些困惑,我认为这是不可能的,而且我什至不确定如何动态处理基于闭包的约定。
【问题讨论】:
标签: grails groovy dsl spring-dsl