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

时间:2017-07-12 17:08:37

标签: grails grails3

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

例如,尝试在MyPluginGrailsPlugin.groovy文件中直接执行某些操作,例如:

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

不会更新配置。

如果此插件在应用程序中被包含,则在启动后的任何时候,grailsApplication.config.getProperty('test')将返回null。

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

注意:在grails 2中,这曾经起作用。

1 个答案:

答案 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()