DynamicPropertiesImpl(AbstractConfiguration... configurations) { ConcurrentCompositeConfiguration configuration = new ConcurrentCompositeConfiguration(); Arrays.stream(configurations).forEach(configuration::addConfiguration); ConfigurationManager.install(configuration); }
private static void duplicateCseConfigToServicecomb(ConcurrentCompositeConfiguration compositeConfiguration, AbstractConfiguration source, String sourceName) { duplicateCseConfigToServicecomb(source); compositeConfiguration.addConfiguration(source, sourceName); }
@Override public Object getProperty(String s) { return this.source.getProperty(s); } });
@SuppressWarnings("unchecked") public String getServiceName() { String service = finalConfig.getString(SERVICE_NAME); String appName = finalConfig.getString(APPLICATION_NAME); String tags; if (appName != null) { service = service + "@" + appName; } String serviceVersion = finalConfig.getString(SERVICE_VERSION); if (serviceVersion != null) { service = service + "#" + serviceVersion; } Object o = finalConfig.getProperty(INSTANCE_TAGS); if (o == null) { return service; } if (o instanceof List) { tags = Joiner.on(",").join((List<String>) o); } else { tags = o.toString(); } service += "!" + tags; return service; }
private static boolean getBooleanProperty(ConcurrentCompositeConfiguration configSource, boolean defaultValue, String... keys) { String property = null; for (String key : keys) { if (configSource != null) { if (configSource.getProperty(key) != null) { return configSource.getBoolean(key); } } else { property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get(); } if (property != null) { break; } } if (property != null) { return Boolean.parseBoolean(property); } else { return defaultValue; } }
public static ConcurrentCompositeConfiguration createLocalConfig(List<ConfigModel> configModelList) { ConcurrentCompositeConfiguration config = new ConcurrentCompositeConfiguration(); duplicateCseConfigToServicecomb(config, new ConcurrentMapConfiguration(new SystemConfiguration()), "configFromSystem"); duplicateCseConfigToServicecomb(config, convertEnvVariable(new ConcurrentMapConfiguration(new EnvironmentConfiguration())), "configFromEnvironment"); // If there is extra configurations, add it into config. EXTRA_CONFIG_MAP.entrySet() .stream() .filter(mapEntry -> !mapEntry.getValue().isEmpty()) .forEachOrdered(configMapEntry -> duplicateCseConfigToServicecomb(config, new ConcurrentMapConfiguration(configMapEntry.getValue()), configMapEntry.getKey())); // we have already copy the cse config to the serviceComb config when we load the config from local yaml files // hence, we do not need duplicate copy it. config.addConfiguration( new DynamicConfiguration( new MicroserviceConfigurationSource(configModelList), new NeverStartPollingScheduler()), "configFromYamlFile"); duplicateCseConfigToServicecombAtFront(config, new ConcurrentMapConfiguration(ConfigMapping.getConvertedMap(config)), "configFromMapping"); return config; }
private static AbstractConfiguration createDefaultConfigInstance() { ConcurrentCompositeConfiguration config = new ConcurrentCompositeConfiguration(); try { DynamicURLConfiguration defaultURLConfig = new DynamicURLConfiguration(); config.addConfiguration(defaultURLConfig, URL_CONFIG_NAME); } catch (Throwable e) { logger.warn("Failed to create default dynamic configuration", e); } if (!Boolean.getBoolean(DISABLE_DEFAULT_SYS_CONFIG)) { SystemConfiguration sysConfig = new SystemConfiguration(); config.addConfiguration(sysConfig, SYS_CONFIG_NAME); } if (!Boolean.getBoolean(DISABLE_DEFAULT_ENV_CONFIG)) { EnvironmentConfiguration envConfig = new EnvironmentConfiguration(); config.addConfiguration(envConfig, ENV_CONFIG_NAME); } ConcurrentCompositeConfiguration appOverrideConfig = new ConcurrentCompositeConfiguration(); config.addConfiguration(appOverrideConfig, APPLICATION_PROPERTIES); config.setContainerConfigurationIndex(config.getIndexOfConfiguration(appOverrideConfig)); return config; }
/** * Build the Configuration * * @return the configuration */ public AbstractConfiguration build() { initApplicationFileConfiguration(); initAppVersion(); initApplicationConfiguration(); initModuleConfiguration(); ConcurrentCompositeConfiguration finalConfiguration = new ConcurrentCompositeConfiguration(); if (addSystemConfigs) { finalConfiguration.addConfiguration(new ConcurrentMapConfiguration(new SystemConfiguration())); } finalConfiguration.addProperty(BootstrapConfigKeys.APP_VERSION_KEY.getPropertyName(), appVersion); addServerInstanceProperties(finalConfiguration); if (applicationConfiguration == null) { LOGGER.warn("\n\n ****** Default configuration being used ******\n client application \"" + appName + "\" is being configured with modules defaults. Defaults should only be used in development environments.\n In non-developement environments, a configuration provider should be used to configure the client application and it should define ALL required configuration properties.\n"); finalConfiguration.addConfiguration(applicationFileConfiguration); finalConfiguration.addConfiguration(moduleDefaultConfiguration); } else { finalConfiguration.addConfiguration(applicationConfiguration); finalConfiguration.addConfiguration(applicationFileConfiguration); } finalConfiguration.setProperty(BootstrapConfigKeys.APP_VERSION_KEY.getPropertyName(), appVersion); configureArchaius(finalConfiguration); logConfiguration(finalConfiguration); return finalConfiguration; }
case EVENT_CLEAR: case EVENT_CONFIGURATION_SOURCE_CHANGED: fireEvent(type, name, value, beforeUpdate); break; fireEvent(type, name, value, beforeUpdate); } else { AbstractConfiguration sourceConfig = (AbstractConfiguration) event.getSource(); AbstractConfiguration winningConf = (AbstractConfiguration) getSource(name); if (winningConf == null || getIndexOfConfiguration(sourceConfig) <= getIndexOfConfiguration(winningConf)) { fireEvent(type, name, value, beforeUpdate); finalValue = ConcurrentCompositeConfiguration.this.getProperty(name); if (finalValue == null) { fireEvent(type, name, value, beforeUpdate); } else { fireEvent(EVENT_SET_PROPERTY, name, finalValue, beforeUpdate);
copy.clearConfigurationListeners(); copy.configList = new LinkedList<AbstractConfiguration>(); copy.containerConfiguration = (AbstractConfiguration) ConfigurationUtils .cloneConfiguration(getContainerConfiguration()); copy.configList.add(copy.containerConfiguration); if (config != getContainerConfiguration()) copy.addConfiguration((AbstractConfiguration) ConfigurationUtils .cloneConfiguration(config));
public static void main(String[] args) { new SampleApplication(); ConcurrentCompositeConfiguration myConfiguration = (ConcurrentCompositeConfiguration) DynamicPropertyFactory.getInstance().getBackingConfigurationSource(); ConcurrentMapConfiguration subConfig = new ConcurrentMapConfiguration(); subConfig.setProperty("com.netflix.config.samples.SampleApp.SampleBean.name", "A Coffee Bean from Cuba"); myConfiguration.setProperty("com.netflix.config.samples.sampleapp.prop1", "value1"); myConfiguration.addConfiguration(subConfig); System.out.println("Started SampleApplication. Launch JConsole to inspect and update properties."); System.out.println("To see how callback work, update property com.netflix.config.samples.SampleApp.SampleBean.sensitiveBeanData from BaseConfigBean in JConsole"); SampleBean sampleBean = new SampleBean(); // this should show the bean taking properties from two different sources // property "com.netflix.config.samples.SampleApp.SampleBean.numSeeds" is from sampleapp.properites // property "com.netflix.config.samples.SampleApp.SampleBean.name" is from subConfig added above System.out.println("SampleBean:" + sampleBean); System.out.println(sampleBean.getName()); } }
protected void load(boolean refresh) { List<AbstractConfiguration> configs = extensionManager.getExtensionList(CONFIG_KEY, AbstractConfiguration.class); for (AbstractConfiguration config : configs) { config.setDelimiterParsingDisabled(true); } if (refresh) { for (AbstractConfiguration config : configs) { refresh(config); } } baseConfig.clear(); for (AbstractConfiguration config : configs) { baseConfig.addConfiguration(config); } if (refresh) { for (RefreshableFixedDelayPollingScheduler scheduler : schedulers) { scheduler.refresh(); } ArchaiusUtil.addSchedulers(schedulers); } }
if (current instanceof ConcurrentCompositeConfiguration) { ConcurrentCompositeConfiguration composite = (ConcurrentCompositeConfiguration) current; for (String name: composite.getConfigurationNames()) { map.put(name, composite.getConfiguration(name)); for (Configuration c: composite.getConfigurations()) { toProcess.add(c);
@PostConstruct public void init() { ConcurrentCompositeConfiguration configInstance = (ConcurrentCompositeConfiguration) ConfigurationManager.getConfigInstance(); if (configInstance.containsKey(AdminResourcesContainer.DEFAULT_PAGE_PROP_NAME)) { logger.info("Admin container default page already set to: " + configInstance.getString(AdminResourcesContainer.DEFAULT_PAGE_PROP_NAME + ", not overriding.")); return; } configInstance.setOverrideProperty(AdminResourcesContainer.DEFAULT_PAGE_PROP_NAME, ADMINRES_WEBADMIN_INDEX_HTML); logger.info("Set the default page for admin container to: " + ADMINRES_WEBADMIN_INDEX_HTML); } }
@Test public void testAppGroupName() throws Exception { String appGroup = "testAppGroup"; ((ConcurrentCompositeConfiguration) ConfigurationManager.getConfigInstance()).setOverrideProperty("eureka.appGroup", appGroup); MyDataCenterInstanceConfig config = new MyDataCenterInstanceConfig(); Assert.assertEquals("Unexpected app group name", appGroup, config.getAppGroupName()); }
@Override public Map<String, Object> invoke() { Map<String, Object> map = new LinkedHashMap<String, Object>(); AbstractConfiguration config = ConfigurationManager.getConfigInstance(); if (config instanceof ConcurrentCompositeConfiguration) { ConcurrentCompositeConfiguration composite = (ConcurrentCompositeConfiguration) config; for (Configuration item : composite.getConfigurations()) { append(map, item); } } else { append(map, config); } return map; }
@After public void tearDown() throws Exception { ((ConcurrentCompositeConfiguration) ConfigurationManager.getConfigInstance()).clearOverrideProperty("NETFLIX_APP_GROUP"); ((ConcurrentCompositeConfiguration) ConfigurationManager.getConfigInstance()).clearOverrideProperty("eureka.appGroup"); }
/** * Creates an empty CompositeConfiguration object which can then * be added some other Configuration files */ public ConcurrentCompositeConfiguration() { clear(); }
private static void initializeArchaius() throws ConfigurationException { // Default configuration from classpath of this bundle AbstractConfiguration defaultConfig = new PropertiesConfiguration(ArchaiusConfig.class.getResource(DEFAULT_CONFIGURATION)); ConcurrentCompositeConfiguration finalConfig = new ConcurrentCompositeConfiguration(); // inject OSGi config which is filled via {@link ArchaiusOsgiProperties} finalConfig.addConfiguration(OSGI_CONFIG); finalConfig.addConfiguration(defaultConfig); ConfigurationManager.install(finalConfig); log.debug("Initialized archaius configuration."); }
private static AbstractConfiguration createDefaultConfigInstance() { ConcurrentCompositeConfiguration config = new ConcurrentCompositeConfiguration(); try { DynamicURLConfiguration defaultURLConfig = new DynamicURLConfiguration(); config.addConfiguration(defaultURLConfig, URL_CONFIG_NAME); } catch (Throwable e) { logger.warn("Failed to create default dynamic configuration", e); } if (!Boolean.getBoolean(DISABLE_DEFAULT_SYS_CONFIG)) { SystemConfiguration sysConfig = new SystemConfiguration(); config.addConfiguration(sysConfig, SYS_CONFIG_NAME); } if (!Boolean.getBoolean(DISABLE_DEFAULT_ENV_CONFIG)) { EnvironmentConfiguration envConfig = new EnvironmentConfiguration(); config.addConfiguration(envConfig, ENV_CONFIG_NAME); } ConcurrentCompositeConfiguration appOverrideConfig = new ConcurrentCompositeConfiguration(); config.addConfiguration(appOverrideConfig, APPLICATION_PROPERTIES); config.setContainerConfigurationIndex(config.getIndexOfConfiguration(appOverrideConfig)); return config; }