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()
我有一个插件,它在启动期间从应用程序配置文件中读取一些属性,创建一些域对象,然后需要使用一些附加信息更新配置。但是,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()