あなたの中で、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 のトリックを使用してそれを行うことができます.1 つのキーが別のプレフィックスである従来のプロパティにケースがないことを確認できます。つまり、
my.app.foo=bar
my.app.bar=baz
大丈夫ですが、
my.app.foo=bar
my.app=baz
OKではありません。プロパティがこれを満たしている場合は、次のようなものを試してください
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)
}
}