From 2dbc60f0b6893fba4009ab8030507c6d7bffd951 Mon Sep 17 00:00:00 2001 From: Milan Baran Date: Mon, 18 Dec 2017 17:04:33 +0100 Subject: [PATCH 1/3] Default config reader extendability. --- .../archaius/guice/ArchaiusModule.java | 28 +++++++++++++++++++ .../guice/InternalArchaiusModule.java | 5 ++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java b/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java index b0b85114e..bc52d4996 100644 --- a/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java +++ b/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java @@ -18,14 +18,17 @@ import java.util.Properties; import com.google.inject.AbstractModule; +import com.google.inject.Scopes; import com.google.inject.binder.LinkedBindingBuilder; import com.google.inject.multibindings.Multibinder; import com.google.inject.name.Names; import com.netflix.archaius.api.CascadeStrategy; import com.netflix.archaius.api.Config; +import com.netflix.archaius.api.ConfigReader; import com.netflix.archaius.api.inject.DefaultLayer; import com.netflix.archaius.api.inject.RemoteLayer; import com.netflix.archaius.config.MapConfig; +import com.netflix.archaius.readers.PropertiesConfigReader; /** * Guice Module for enabling archaius and making its components injectable. Installing this @@ -239,8 +242,33 @@ protected void bindApplicationConfigurationOverrideResource(String overrideResou Multibinder.newSetBinder(binder(), String.class, ApplicationOverrideResources.class).permitDuplicates().addBinding().toInstance(overrideResource); } + /** + * Binding ConfigReaders has been removed from InternalArchaiusModule class which is locked for modification and it has been added to configure as overridable method. + *

+ * For example to disable default PropertyConfigReader and add TypesafeConfigReader + *
+ * + *
+     * install(new ArchaiusModule() {
+     *    {@literal @}Override
+     *    protected void bindDefaultReaders() {}
+     *
+     *    {@literal @}Override
+     *    protected void configureArchaius() {
+     *          Multibinder.newSetBinder(this.binder(), ConfigReader.class).addBinding().to(TypesafeConfigReader.class).asEagerSingleton();
+     *    }
+     * });
+     * 
+ *
+ */ + protected void bindDefaultReaders() { + Multibinder.newSetBinder(binder(), ConfigReader.class) + .addBinding().to(PropertiesConfigReader.class).in(Scopes.SINGLETON); + } + @Override protected final void configure() { + bindDefaultReaders(); install(new InternalArchaiusModule()); configureArchaius(); diff --git a/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java b/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java index b87caece8..dd1f66549 100644 --- a/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java +++ b/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java @@ -33,6 +33,8 @@ import com.netflix.archaius.interpolate.ConfigStrLookup; import com.netflix.archaius.readers.PropertiesConfigReader; +import java.util.Collections; +import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; @@ -65,9 +67,6 @@ protected void configure() { bind(ConfigurationInjectingListener.class).toInstance(listener); requestStaticInjection(ConfigurationInjectingListener.class); bindListener(Matchers.any(), listener); - - Multibinder.newSetBinder(binder(), ConfigReader.class) - .addBinding().to(PropertiesConfigReader.class).in(Scopes.SINGLETON); } @Provides From ff92176bcb41941cf8a041c8051da9652de71907 Mon Sep 17 00:00:00 2001 From: Milan Baran Date: Mon, 18 Dec 2017 17:09:27 +0100 Subject: [PATCH 2/3] Default config reader extendability. --- .../archaius/guice/InternalArchaiusModule.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java b/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java index dd1f66549..ca4b9c0f1 100644 --- a/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java +++ b/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java @@ -3,21 +3,13 @@ import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Provides; -import com.google.inject.Scopes; import com.google.inject.Singleton; import com.google.inject.matcher.Matchers; -import com.google.inject.multibindings.Multibinder; import com.netflix.archaius.ConfigProxyFactory; import com.netflix.archaius.DefaultConfigLoader; import com.netflix.archaius.DefaultDecoder; import com.netflix.archaius.DefaultPropertyFactory; -import com.netflix.archaius.api.CascadeStrategy; -import com.netflix.archaius.api.Config; -import com.netflix.archaius.api.ConfigLoader; -import com.netflix.archaius.api.ConfigReader; -import com.netflix.archaius.api.Decoder; -import com.netflix.archaius.api.PropertyFactory; -import com.netflix.archaius.api.PropertyRepository; +import com.netflix.archaius.api.*; import com.netflix.archaius.api.config.CompositeConfig; import com.netflix.archaius.api.config.SettableConfig; import com.netflix.archaius.api.exceptions.ConfigException; @@ -31,15 +23,11 @@ import com.netflix.archaius.config.EnvironmentConfig; import com.netflix.archaius.config.SystemConfig; import com.netflix.archaius.interpolate.ConfigStrLookup; -import com.netflix.archaius.readers.PropertiesConfigReader; - -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; import javax.inject.Named; import javax.inject.Provider; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; final class InternalArchaiusModule extends AbstractModule { static final String CONFIG_NAME_KEY = "archaius.config.name"; From ccf2396a845646e40b006c5408c252d520481b47 Mon Sep 17 00:00:00 2001 From: Milan Baran Date: Mon, 18 Dec 2017 17:25:07 +0100 Subject: [PATCH 3/3] Test fix - It is safe to assume that some config reader will be provided from public module. --- .../guice/InternalArchaiusModuleTest.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java b/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java index b8f160668..56342ecfb 100644 --- a/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java +++ b/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java @@ -1,6 +1,10 @@ package com.netflix.archaius.guice; +import com.google.inject.AbstractModule; import com.google.inject.Guice; +import com.google.inject.multibindings.Multibinder; +import com.netflix.archaius.api.ConfigReader; +import com.netflix.archaius.readers.PropertiesConfigReader; import org.junit.Test; public class InternalArchaiusModuleTest { @@ -8,7 +12,14 @@ public class InternalArchaiusModuleTest { @Test public void succeedOnDuplicateInstall() { Guice.createInjector( - new InternalArchaiusModule(), - new InternalArchaiusModule()); + new AbstractModule() { + @Override + protected void configure() { + Multibinder.newSetBinder(this.binder(), ConfigReader.class).addBinding().to(PropertiesConfigReader.class).asEagerSingleton(); + } + }, + new InternalArchaiusModule(), + new InternalArchaiusModule() + ); } }