diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml b/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml
new file mode 100644
index 0000000000..3ffbf8f619
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/pom.xml
@@ -0,0 +1,47 @@
+
+
+ 4.0.0
+ dynamodb-config
+ jar
+
+
+ com.baeldung.spring.cloud
+ spring-cloud-archaius
+ 1.0.0-SNAPSHOT
+ ..
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.amazonaws
+ aws-java-sdk-dynamodb
+ ${aws.sdk.dynamo.version}
+
+
+ com.github.derjust
+ spring-data-dynamodb
+ ${spring.dynamo.version}
+
+
+ com.netflix.archaius
+ archaius-aws
+ ${archaius.version}
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+
+ 1.11.407
+ 5.0.3
+ 0.7.6
+
+
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java
new file mode 100644
index 0000000000..ee08f2b1fb
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/DynamoSourcesApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.spring.cloud.archaius.dynamosources;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DynamoSourcesApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DynamoSourcesApplication.class, args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java
new file mode 100644
index 0000000000..7b533e8021
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/ApplicationPropertiesConfigurations.java
@@ -0,0 +1,52 @@
+package com.baeldung.spring.cloud.archaius.dynamosources.config;
+
+import java.util.Arrays;
+
+import org.apache.commons.configuration.AbstractConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
+import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
+import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
+import com.amazonaws.services.dynamodbv2.util.TableUtils;
+import com.baeldung.spring.cloud.archaius.dynamosources.dynamodb.ArchaiusProperties;
+import com.baeldung.spring.cloud.archaius.dynamosources.dynamodb.ArchaiusPropertiesRepository;
+import com.netflix.config.DynamicConfiguration;
+import com.netflix.config.FixedDelayPollingScheduler;
+import com.netflix.config.PolledConfigurationSource;
+import com.netflix.config.sources.DynamoDbConfigurationSource;
+
+@Configuration
+public class ApplicationPropertiesConfigurations {
+
+ @Autowired
+ AmazonDynamoDB amazonDynamoDb;
+
+ @Autowired
+ private ArchaiusPropertiesRepository repository;
+
+ @Bean
+ public AbstractConfiguration addApplicationPropertiesSource() {
+ // Normally, the DB Table would be already created and populated.
+ // In this case, we'll do it just before creating the archaius config source that uses it
+ initDatabase();
+ PolledConfigurationSource source = new DynamoDbConfigurationSource(amazonDynamoDb);
+ return new DynamicConfiguration(source, new FixedDelayPollingScheduler());
+ }
+
+ private void initDatabase() {
+ // Create the table
+ DynamoDBMapper mapper = new DynamoDBMapper(amazonDynamoDb);
+ CreateTableRequest tableRequest = mapper.generateCreateTableRequest(ArchaiusProperties.class);
+ tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1L, 1L));
+ TableUtils.createTableIfNotExists(amazonDynamoDb, tableRequest);
+
+ // Populate the table
+ ArchaiusProperties property = new ArchaiusProperties("baeldung.archaius.properties.one", "one FROM:dynamoDB");
+ ArchaiusProperties property3 = new ArchaiusProperties("baeldung.archaius.properties.three", "three FROM:dynamoDB");
+ repository.saveAll(Arrays.asList(property, property3));
+ }
+}
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java
new file mode 100644
index 0000000000..8f12051a7f
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/config/DynamoDbConfiguration.java
@@ -0,0 +1,46 @@
+package com.baeldung.spring.cloud.archaius.dynamosources.config;
+
+import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
+import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
+
+@Configuration
+@EnableDynamoDBRepositories(basePackages = "com.baeldung.spring.cloud.archaius.dynamosources.dynamodb")
+public class DynamoDbConfiguration {
+
+ @Value("${amazon.dynamodb.endpoint}")
+ private String amazonDynamoDBEndpoint;
+
+ @Value("${aws.accessKeyId}")
+ private String amazonDynamoDBAccessKeyId;
+
+ @Value("${aws.secretKey}")
+ private String amazonDynamoDBSecretKey;
+
+ @Bean
+ public AmazonDynamoDB amazonDynamoDB() {
+ AmazonDynamoDB amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()
+ .withCredentials(amazonAWSCredentials())
+ .withEndpointConfiguration(setupEndpointConfiguration())
+ .build();
+
+ return amazonDynamoDB;
+ }
+
+ private AWSCredentialsProvider amazonAWSCredentials() {
+ return new AWSStaticCredentialsProvider(new BasicAWSCredentials(amazonDynamoDBAccessKeyId, amazonDynamoDBSecretKey));
+ }
+
+ private EndpointConfiguration setupEndpointConfiguration() {
+ return new EndpointConfiguration(amazonDynamoDBEndpoint, Regions.DEFAULT_REGION.getName());
+ }
+}
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java
new file mode 100644
index 0000000000..2ac5055fe3
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/controller/ConfigPropertiesController.java
@@ -0,0 +1,32 @@
+package com.baeldung.spring.cloud.archaius.dynamosources.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.netflix.config.DynamicPropertyFactory;
+import com.netflix.config.DynamicStringProperty;
+
+@RestController
+public class ConfigPropertiesController {
+
+ private DynamicStringProperty propertyOneWithDynamic = DynamicPropertyFactory.getInstance()
+ .getStringProperty("baeldung.archaius.properties.one", "not found!");
+
+ private DynamicStringProperty propertyTwoWithDynamic = DynamicPropertyFactory.getInstance()
+ .getStringProperty("baeldung.archaius.properties.two", "not found!");
+
+ private DynamicStringProperty propertyThreeWithDynamic = DynamicPropertyFactory.getInstance()
+ .getStringProperty("baeldung.archaius.properties.three", "not found!");
+
+ @GetMapping("/properties-from-dynamic")
+ public Map getPropertiesFromDynamic() {
+ Map properties = new HashMap<>();
+ properties.put(propertyOneWithDynamic.getName(), propertyOneWithDynamic.get());
+ properties.put(propertyTwoWithDynamic.getName(), propertyTwoWithDynamic.get());
+ properties.put(propertyThreeWithDynamic.getName(), propertyThreeWithDynamic.get());
+ return properties;
+ }
+}
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java
new file mode 100644
index 0000000000..016f8433cf
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusProperties.java
@@ -0,0 +1,23 @@
+package com.baeldung.spring.cloud.archaius.dynamosources.dynamodb;
+
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@DynamoDBTable(tableName = "archaiusProperties")
+public class ArchaiusProperties {
+
+ @DynamoDBHashKey
+ @DynamoDBAttribute
+ private String key;
+
+ @DynamoDBAttribute
+ private String value;
+}
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java
new file mode 100644
index 0000000000..fbcc953261
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/java/com/baeldung/spring/cloud/archaius/dynamosources/dynamodb/ArchaiusPropertiesRepository.java
@@ -0,0 +1,7 @@
+package com.baeldung.spring.cloud.archaius.dynamosources.dynamodb;
+
+import org.springframework.data.repository.CrudRepository;
+
+public interface ArchaiusPropertiesRepository extends CrudRepository {
+
+}
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/resources/application.properties b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/resources/application.properties
new file mode 100644
index 0000000000..3823d2685f
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/main/resources/application.properties
@@ -0,0 +1,6 @@
+server.port=8082
+baeldung.archaius.properties.one=one FROM:application.properties
+baeldung.archaius.properties.two=two FROM:application.properties
+amazon.dynamodb.endpoint=http://localhost:8000/
+aws.accessKeyId=key
+aws.secretKey=key2
diff --git a/spring-cloud/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java
new file mode 100644
index 0000000000..3802cb99cd
--- /dev/null
+++ b/spring-cloud/spring-cloud-archaius/dynamodb-config/src/test/java/com/baeldung/spring/cloud/archaius/dynamosources/ArchaiusDynamoDbLiveTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.spring.cloud.archaius.dynamosources;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpMethod;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class ArchaiusDynamoDbLiveTest {
+
+ private static final String BASE_URL = "http://localhost:8082";
+
+ private static final String DYNAMIC_PROPERTIES_URL = "/properties-from-dynamic";
+ private static final Map EXPECTED_ARCHAIUS_PROPERTIES = createExpectedArchaiusProperties();
+
+ private static Map createExpectedArchaiusProperties() {
+ Map map = new HashMap<>();
+ map.put("baeldung.archaius.properties.one", "one FROM:dynamoDB");
+ map.put("baeldung.archaius.properties.two", "two FROM:application.properties");
+ map.put("baeldung.archaius.properties.three", "three FROM:dynamoDB");
+ return map;
+ }
+
+ @Autowired
+ ConfigurableApplicationContext context;
+
+ @Autowired
+ private TestRestTemplate template;
+
+ private Map exchangeAsMap(String uri, ParameterizedTypeReference