在您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技巧提供你可以肯定,有沒有情況,你有一個關鍵是另一個的前綴的傳統特性,即
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)
}
}
您將此屬性存儲在自定義文件中,或者這是一個自定義類? – 2013-04-05 16:27:49
這是一個自定義的類/數據格式。雖然有一個bean可以將屬性公開爲屬性對象。 – rongenre 2013-04-05 16:30:37