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; }
/** * Create an instance and start polling the configuration source. * * @param source PolledConfigurationSource to poll * @param scheduler AbstractPollingScheduler whose {@link AbstractPollingScheduler#schedule(Runnable)} will be * used to determine the polling schedule */ public DynamicConfiguration(PolledConfigurationSource source, AbstractPollingScheduler scheduler) { this(); startPolling(source, scheduler); }
public PropertyListenerToDynamicConfig(String name, DynamicConfiguration config) { super(name); this.config = config; this.config.addConfigurationListener(new ConfigurationListener() { @Override public void configurationChanged(ConfigurationEvent event) { if (!event.isBeforeUpdate()) { switch (event.getType()) { case AbstractConfiguration.EVENT_ADD_PROPERTY: case AbstractConfiguration.EVENT_SET_PROPERTY: case AbstractConfiguration.EVENT_CLEAR_PROPERTY: notifyConfigUpdated(); break; case AbstractConfiguration.EVENT_CLEAR: notifyConfigUpdated(); break; } } } }); }
protected String toString(Configuration config) { if (config instanceof NamedConfigurationSource) { return ((NamedConfigurationSource) config).getSourceName(); } if (config instanceof DynamicConfiguration) { return ((DynamicConfiguration) config).getSource().getClass().getName(); } return config == null ? null : config.getClass().getName(); }
/** * Start polling the configuration source with the specified scheduler. * * @param source PolledConfigurationSource to poll * @param scheduler AbstractPollingScheduler whose {@link AbstractPollingScheduler#schedule(Runnable)} will be * used to determine the polling schedule */ public synchronized void startPolling(PolledConfigurationSource source, AbstractPollingScheduler scheduler) { this.scheduler = scheduler; this.source = source; init(source, scheduler); scheduler.startPolling(source, this); }
@Override public boolean containsKey(String key) { return config.containsKey(key); }
protected void refresh(AbstractConfiguration config) { if (config instanceof DynamicConfiguration && ((DynamicConfiguration) config).getSource() instanceof LazyJDBCSource) { LazyJDBCSource source = (LazyJDBCSource) ((DynamicConfiguration) config).getSource(); if (configDataSource == null) { configDataSource = dataSourceFactory.createDataSource(dataSourceName); } source.setSource(new JDBCConfigurationSource(configDataSource, query, keyColumnName, valueColumnName)); } }
/** * Start polling the configuration source with the specified scheduler. * * @param source PolledConfigurationSource to poll * @param scheduler AbstractPollingScheduler whose {@link AbstractPollingScheduler#schedule(Runnable)} will be * used to determine the polling schedule */ public synchronized void startPolling(PolledConfigurationSource source, AbstractPollingScheduler scheduler) { this.scheduler = scheduler; this.source = source; init(source, scheduler); scheduler.startPolling(source, this); }
public ArchaiusInitializingBeanPostProcessor(ConfigurableApplicationContext applicationContext, AbstractPollingScheduler pollingScheduler, SpringEnvironmentPolledConfigurationSource polledConfigurationSource, List<ClasspathPropertySource> propertyBindings) { this.applicationContext = Objects.requireNonNull(applicationContext, "applicationContext"); this.pollingScheduler = Objects.requireNonNull(pollingScheduler, "pollingScheduler"); this.polledConfigurationSource = Objects.requireNonNull(polledConfigurationSource, "polledConfigurationSource"); this.propertyBindings = propertyBindings != null ? propertyBindings : Collections.emptyList(); initPropertyBindings(); configurationInstance = new DynamicConfiguration(polledConfigurationSource, pollingScheduler); if (!ConfigurationManager.isConfigurationInstalled()) { ConfigurationManager.install(new CompositeConfiguration()); } CompositeConfiguration config = (CompositeConfiguration) ConfigurationManager.getConfigInstance(); config.addConfiguration(configurationInstance); applicationContext.getBeanFactory().registerSingleton("environmentBackedConfig", ConfigurationManager.getConfigInstance()); applicationContext.getBeanFactory().registerAlias("environmentBackedConfig", "abstractConfiguration"); }
/** * Create an instance and start polling the configuration source. * * @param source PolledConfigurationSource to poll * @param scheduler AbstractPollingScheduler whose {@link AbstractPollingScheduler#schedule(Runnable)} will be * used to determine the polling schedule */ public DynamicConfiguration(PolledConfigurationSource source, AbstractPollingScheduler scheduler) { this(); startPolling(source, scheduler); }
DynamicConfiguration dbSourcedConfiguration = new DynamicConfiguration(source, scheduler); finalConfig.addConfiguration(dbSourcedConfiguration); }catch(Exception ex){
final DynamicConfiguration dynConfig = new DynamicConfiguration( new URLConfigurationSource(breakerboxConfiguration.getUrls().split(",")), tenacityPollingScheduler);
final DynamicConfiguration dynConfig = new DynamicConfiguration( new URLConfigurationSource(breakerboxConfiguration.getUrls().split(",")), tenacityPollingScheduler);
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; }
@Override protected AbstractConfiguration getConfiguration() { AbstractConfiguration config = ConfigurationManager.getConfigInstance(); boolean dynamic = config.getBoolean(DYNAMIC_CONFIG, true); if (!dynamic) { return new DynamicConfiguration(); } else { String appId = null; DeploymentContext context = ConfigurationManager.getDeploymentContext(); appId = context.getApplicationId(); if (appId == null) { throw new RuntimeException( "Archaius deployment context's applicationId not set (archaius.deployment.applicationId)"); } String consulHost = config.getString(CONSUL_HOST, CONSUL_DEFAULT_HOST); int consulPort = config.getInt(CONSUL_PORT, 8500); String consulAclToken = config.getString(CONSUL_TOKEN); ConsulWatchedConfigurationSource configSource = new ConsulWatchedConfigurationSource(appId, new ConsulClient(consulHost, consulPort), 30, TimeUnit.SECONDS, consulAclToken); // do the first update synchronously try { configSource.runOnce(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } configSource.startAsync(); return new DynamicWatchedConfiguration(configSource); } }