gpt4 book ai didi

spring - Grails属性初始化

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

我正在尝试将遗留的Java / spring应用程序集成到我的grails应用程序中。这段代码使用了许多自定义属性,当我连接旧版应用程序上下文内容时,这些属性似乎不可用。

如果我将它们分别加载到Config.groovy中,那么一切就可以开始工作,但是我真的很喜欢一种编程方式(意味着加载旧版属性对象并将其插入grails配置中)。

最好的方法是什么? Bootstrap初始化似乎为时已晚,此时appContext已被刷新,并且引发了有关未解析属性的异常。

最佳答案

Config.groovy中,您可以执行以下基本操作

Properties legacyProps = // whatever you need to do to load the legacy properties
for(String propName in legacyProps.stringPropertyNames()) {
setProperty(propName, legacyProps.getProperty(propName))
}

适用于不包含任何点的属性名称。确实包含点的属性将被添加到Grails配置中,但仅作为平键而不是分层键,即
grailsApplication.config.'property.with.dots'

相对于
grailsApplication.config.property.with.dots

如果您希望他们以适当的层次结构形式添加代码,则可以使用Groovy技巧来做到这一点,只要可以确保在Heritage属性中不会出现一个键为另一个键的前缀的情况。
my.app.foo=bar
my.app.bar=baz

可以,但是
my.app.foo=bar
my.app=baz

不好。如果属性满足此要求,请尝试类似
Properties legacyProps = // whatever you need to do to load the legacy properties
for(String propName in legacyProps.stringPropertyNames()) {
String[] propParts = propName.split(/\./)
if(propParts.size() == 1) {
// no dots
setProperty(propName, legacyProps.getProperty(propName))
} else {
// we have dots - get the first segment (which is a ConfigObject)
ConfigObject co = getProperty(propParts[0])
if(propParts.size() > 2) {
// then apply all but the last segment to that to get the last parent
co = propParts[1..-2].inject(co) { o, part -> o."${part}" }
}
// then set final segment on the last parent ConfigObject
co."${propParts[-1]}" = legacyProps.getProperty(propName)
}
}

关于spring - Grails属性初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15837672/

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