gpt4 book ai didi

grails - 如何仅使用Grails中的嵌套映射创建ConfigObject?

转载 作者:行者123 更新时间:2023-12-02 14:19:31 25 4
gpt4 key购买 nike

是否可以将基于闭包的配置实现为 map ?

grails {
acme {
host = 'localhost'
poolSettings {
timeout = 5000
}
}
}

上面的配置是grails插件的约定。我们正在进行迁移,由于遗留限制,我们需要动态创建配置以消除对遗留代码的影响。

我从一个简单的配置开始:
grails.acme = [host:'localhost']

插件在启动时可以很好地工作,因此我添加了一个嵌套 map :
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 - Error initializing the application: No signature of method: AcmePlugin$_closure2_closure5_closure9 .doCall() is applicable for argument types: (grails.spring.BeanBuilder) values: [grails.spring.BeanBuilder@7b067fd7] Possible solutions: doCall(java.lang.Object, java.lang.Object), call(), call([Ljava.lang.Object;), call(java.lang.Object), call(java.lang.Object, java.lang.Object), findAll() Message: No signature of method: AcmeGrailsPlugin$_closure2_closure5_closure9.doCall() is applicable for argument types: (grails.spring.BeanBuilder) values: [grails.spring.BeanBuilder@7b067 fd7] Possible solutions: doCall(java.lang.Object, java.lang.Object), call(), call([Ljava.lang.Object;), call(java.lang.Object), call(java.lang.Object, java.lang.Object)



我对此感到困惑,我假设这是不可能的,而且我不确定如何动态地实现基于闭包的约定。

最佳答案

您的代码的一个问题可能是config节点结构看起来完全正确,但实际上并非如此。即一些节点是Map实例,而不是ConfigObject实例。

在大多数情况下,这可能无关紧要,但是在您的情况下,似乎第3方插件因某些丑陋且无法理解的异常而失败。

我无法重现您的问题,因此无法确定这是否是您遇到的真正问题,也无法确定建议的解决方案是否可以解决您的问题。尽管如此,我的第一个尝试就是修复类型,以使配置树中的所有节点都为ConfigObject类型。像这样:

def poolProps = [timeout: 5000] as ConfigObject // convert type to ConfigObject
grails.acme.host = 'localhost'
grails.acme << [ poolSettings : poolProps ]

请注意,如果您创建的 map (在本例中为poolProps)包含嵌套的 map 元素,则也必须将其转换。

关于grails - 如何仅使用Grails中的嵌套映射创建ConfigObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com