grails 3 - 在插件 "doWithApplicationContext" 期间更新 grails 配置

grails 3 - Update grails config during Plugin "doWithApplicationContext"

我有一个插件,它在启动期间从应用程序配置文件中读取一些属性,创建一些域对象,然后需要使用一些附加信息更新配置。但是,doWithApplicationContext 期间可用的配置对象似乎不是实际的 grailsApplication.config 对象。

例如,尝试在 MyPluginGrailsPlugin.groovy 文件中做一些简单的事情,例如:

void doWithApplicationContext() {
  grailsApplication.config.put('test', 'testValue')
}

不更新配置。

如果此插件包含在应用程序中,则在启动后的任何时候,grailsApplication.config.getProperty('test') 都会 return 无效。

如何在插件启动期间更新配置映射?

注意:在 grails 2 中,这曾经有效。

使用 MyPluginGrailsPlugin.groovy 的 doWithApplicationContext 中的此代码片段,新属性已成功添加到应用程序的配置对象中。

 ConfigObject myConfigObject = new ConfigSlurper().parse(props)
 PropertySource propertySource = new MapPropertySource('grails.plugins.myPlugin', [:] << myConfigObject)
 def propertySources = grailsApplication.mainContext.environment.propertySources
 propertySources.addFirst propertySource

作为附加说明:在我的插件的 doWithApplicationContext 中,像这样更改配置对象在 Grails 2 中有效,但在 Grails 3 中不再有效。

grailsApplication.config.merge(myConfigObject)
grailsApplication.configChanged()