@@ -14,6 +14,9 @@ import grails.util.Environment
14
14
import grails.util.Holders
15
15
import groovy.transform.CompileStatic
16
16
import groovy.util.logging.Slf4j
17
+ import io.micronaut.context.env.AbstractPropertySourceLoader
18
+ import io.micronaut.context.env.PropertySource
19
+ import io.micronaut.spring.context.env.MicronautEnvironment
17
20
import org.grails.config.NavigableMap
18
21
import org.grails.config.PrefixedMapPropertySource
19
22
import org.grails.config.PropertySourcesConfig
@@ -156,6 +159,10 @@ class GrailsApplicationPostProcessor implements BeanDefinitionRegistryPostProces
156
159
config. setConversionService( conversionService )
157
160
}
158
161
((DefaultGrailsApplication )grailsApplication). config = config
162
+
163
+ if (applicationContext instanceof ConfigurableApplicationContext ) {
164
+ loadPluginConfigurationsToMicronautContext(applicationContext)
165
+ }
159
166
}
160
167
}
161
168
@@ -283,4 +290,34 @@ class GrailsApplicationPostProcessor implements BeanDefinitionRegistryPostProces
283
290
}
284
291
}
285
292
293
+ @SuppressWarnings (" GrMethodMayBeStatic" )
294
+ private void loadPluginConfigurationsToMicronautContext (ConfigurableApplicationContext applicationContext ) {
295
+ String [] beanNames = applicationContext. getBeanNamesForType(GrailsPluginManager )
296
+ if (beanNames. length == 0 ) {
297
+ // do not continue if PluginManager is not available
298
+ return
299
+ }
300
+
301
+ GrailsPluginManager pluginManager = applicationContext. getBean(GrailsPluginManager )
302
+ ConfigurableApplicationContext parentApplicationContext = (ConfigurableApplicationContext ) applicationContext. parent
303
+ ConfigurableEnvironment parentContextEnv = parentApplicationContext. getEnvironment()
304
+ if (parentContextEnv instanceof MicronautEnvironment ) {
305
+ if (log. isDebugEnabled()) {
306
+ log. debug(" Loading configurations from the plugins to the parent Micronaut context" )
307
+ }
308
+ final io.micronaut.context.env.Environment micronautEnv = ((io.micronaut.context.env.Environment ) parentContextEnv. getEnvironment())
309
+ final GrailsPlugin [] plugins = pluginManager. allPlugins
310
+ Integer priority = AbstractPropertySourceLoader . DEFAULT_POSITION
311
+ Arrays . stream(plugins)
312
+ .filter({ GrailsPlugin plugin -> plugin. propertySource != null })
313
+ .forEach({ GrailsPlugin plugin ->
314
+ if (log. isDebugEnabled()) {
315
+ log. debug(" Loading configurations from {} plugin to the parent Micronaut context" , plugin. name)
316
+ }
317
+ micronautEnv. addPropertySource(PropertySource . of(" grails.plugins.$plugin . name " , (Map ) plugin. propertySource. source, -- priority))
318
+ })
319
+ micronautEnv. refresh()
320
+ applicationContext. setParent(parentApplicationContext)
321
+ }
322
+ }
286
323
}
0 commit comments