/** * Set the parent of this application context. * <p>The parent {@linkplain ApplicationContext#getEnvironment() environment} is * {@linkplain ConfigurableEnvironment#merge(ConfigurableEnvironment) merged} with * this (child) application context environment if the parent is non-{@code null} and * its environment is an instance of {@link ConfigurableEnvironment}. * @see ConfigurableEnvironment#merge(ConfigurableEnvironment) */ @Override public void setParent(@Nullable ApplicationContext parent) { this.parent = parent; if (parent != null) { Environment parentEnvironment = parent.getEnvironment(); if (parentEnvironment instanceof ConfigurableEnvironment) { getEnvironment().merge((ConfigurableEnvironment) parentEnvironment); } } }
/** * Set the parent of this application context. * <p>The parent {@linkplain ApplicationContext#getEnvironment() environment} is * {@linkplain ConfigurableEnvironment#merge(ConfigurableEnvironment) merged} with * this (child) application context environment if the parent is non-{@code null} and * its environment is an instance of {@link ConfigurableEnvironment}. * @see ConfigurableEnvironment#merge(ConfigurableEnvironment) */ @Override public void setParent(@Nullable ApplicationContext parent) { this.parent = parent; if (parent != null) { Environment parentEnvironment = parent.getEnvironment(); if (parentEnvironment instanceof ConfigurableEnvironment) { getEnvironment().merge((ConfigurableEnvironment) parentEnvironment); } } }
@Override public void merge(ConfigurableEnvironment parent) { delegate.merge(parent); }
assertThat(parent.getActiveProfiles(), equalTo(new String[]{"p1","p2"})); child.merge(parent);
@Override public void merge(ConfigurableEnvironment parent) { delegate.merge(parent); }
/** * Set the parent of this application context. * <p>The parent {@linkplain ApplicationContext#getEnvironment() environment} is * {@linkplain ConfigurableEnvironment#merge(ConfigurableEnvironment) merged} with * this (child) application context environment if the parent is non-{@code null} and * its environment is an instance of {@link ConfigurableEnvironment}. * @see ConfigurableEnvironment#merge(ConfigurableEnvironment) */ @Override public void setParent(@Nullable ApplicationContext parent) { this.parent = parent; if (parent != null) { Environment parentEnvironment = parent.getEnvironment(); if (parentEnvironment instanceof ConfigurableEnvironment) { getEnvironment().merge((ConfigurableEnvironment) parentEnvironment); } } }
private void mergeProperties(PropertySourcesPlaceholderConfigurer configurer) { PropertySources sources = configurer.getAppliedPropertySources(); sources.forEach(source -> { Object env = source.getSource(); if (env instanceof ConfigurableEnvironment) { ConfigurableEnvironment ssenv = (ConfigurableEnvironment) env; ssenv.merge(localenv); localenv.merge(ssenv); } }); }
/** * Construct a new environment and use Spring Boot to populate its property sources using * {@link ConfigFileApplicationListener}. */ private ConfigurableEnvironment loadPropertySources(final String searchLocation, final String baseName) { final ConfigurableEnvironment environment = new StandardEnvironment(); environment.merge(parentEnvironment); new ConfigFileApplicationListener() { public void apply() { setSearchLocations(searchLocation); // We'd like to do 'setSearchNames(baseName)', but the environment property // has strong precedence and is already set for XD_CONFIG_NAME. Map<String, Object> singletonMap = Collections.singletonMap("spring.config.name", (Object) baseName); environment.getPropertySources().addFirst( new MapPropertySource("searchNamesOverride", singletonMap)); addPropertySources(environment, resourceLoader); } }.apply(); return environment; }
private Environment lookupEnvironment(ModuleDefinition moduleDefinition) { // load rootEnvironment at runtime than during the startup rootEnvironment = loadPropertySources(xdModuleConfigLocation, configName); String propertySourceName = String.format("%s:%s", moduleDefinition.getType(), moduleDefinition.getName()); // Load short name values into a throwaway env String path = String.format("%s%s/%s/", xdModuleConfigLocation, moduleDefinition.getType(), moduleDefinition.getName()); ConfigurableEnvironment throwAwayEnvironment = loadPropertySources(path, moduleDefinition.getName()); EnumerablePropertySource<?> nakedPS = (EnumerablePropertySource<?>) throwAwayEnvironment.getPropertySources().get( APPLICATION_CONFIGURATION_PROPERTIES); // Now transform them to their fully qualified form Map<String, Object> values = new HashMap<String, Object>(); for (String name : nakedPS.getPropertyNames()) { values.put(fullyQualifiedKey(moduleDefinition, name), nakedPS.getProperty(name)); } EnumerablePropertySource<?> modulePS = new MapPropertySource(propertySourceName, values); ConfigurableEnvironment moduleEnvironment = new StandardEnvironment(); // Append the rootEnvironment moduleEnvironment.merge(rootEnvironment); // The global environment has been loaded by boot too and // its PS of interest was also named "applicationConfigurationProperties" moduleEnvironment.getPropertySources().addBefore(APPLICATION_CONFIGURATION_PROPERTIES, modulePS); return moduleEnvironment; }
@Override public AcrossConfigurableApplicationContext createApplicationContext( AcrossContext across, ApplicationContext parentApplicationContext ) { if ( parentApplicationContext == null || parentApplicationContext instanceof WebApplicationContext ) { WebApplicationContext parentWebContext = (WebApplicationContext) parentApplicationContext; AcrossWebApplicationContext applicationContext = createApplicationContext(); applicationContext.setDisplayName( across.getId() ); applicationContext.setId( ApplicationContextIdNameGenerator.forContext( applicationContext ) ); if ( parentApplicationContext != null ) { applicationContext.setParent( parentApplicationContext ); applicationContext.setServletContext( parentWebContext.getServletContext() ); if ( parentApplicationContext.getEnvironment() instanceof ConfigurableEnvironment ) { applicationContext.getEnvironment().merge( (ConfigurableEnvironment) parentApplicationContext.getEnvironment() ); } } return applicationContext; } return super.createApplicationContext( across, parentApplicationContext ); }
@Override public AcrossConfigurableApplicationContext createApplicationContext( AcrossContext across, ModuleBootstrapConfig moduleBootstrapConfig, AcrossApplicationContextHolder parentContext ) { if ( parentContext.getApplicationContext() instanceof WebApplicationContext ) { WebApplicationContext parentWebContext = (WebApplicationContext) parentContext.getApplicationContext(); AcrossWebApplicationContext child = createApplicationContext(); child.setDisplayName( moduleBootstrapConfig.getModuleName() ); child.setId( ApplicationContextIdNameGenerator.forModule( moduleBootstrapConfig ) ); child.setServletContext( parentWebContext.getServletContext() ); child.setParent( parentContext.getApplicationContext() ); child.getEnvironment().merge( parentContext.getApplicationContext().getEnvironment() ); return child; } return super.createApplicationContext( across, moduleBootstrapConfig, parentContext ); } }