我有一个插件,在启动期间,从应用程序Config文件中读取一些属性,创建一些域对象,然后需要使用一些其他信息更新配置。但是,doWithApplicationContext
期间可用的配置对象似乎不是实际的grailsApplication.config对象。
例如,尝试在MyPluginGrailsPlugin.groovy
文件中直接执行某些操作,例如:
void doWithApplicationContext() {
grailsApplication.config.put('test', 'testValue')
}
不会更新配置。
如果此插件在应用程序中被包含,则在启动后的任何时候,grailsApplication.config.getProperty('test')
将返回null。
如何在插件启动期间更新配置图?
注意:在grails 2中,这曾经起作用。
答案 0 :(得分:1)
在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()