diff --git a/spring-boot-autoconfiguration/pom.xml b/spring-boot-autoconfiguration/pom.xml
index 91692ebfff..5b3b0eb86c 100644
--- a/spring-boot-autoconfiguration/pom.xml
+++ b/spring-boot-autoconfiguration/pom.xml
@@ -38,6 +38,19 @@
mysql
mysql-connector-java
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ 2.1.6.RELEASE
+ true
+
+
+
+ org.hsqldb
+ hsqldb
+ runtime
+
@@ -50,12 +63,10 @@
-
org.apache.maven.plugins
maven-war-plugin
-
diff --git a/spring-boot-autoconfiguration/src/main/java/com/baeldung/autoconfiguration/annotationprocessor/AnnotationProcessorApplication.java b/spring-boot-autoconfiguration/src/main/java/com/baeldung/autoconfiguration/annotationprocessor/AnnotationProcessorApplication.java
new file mode 100644
index 0000000000..91ea94e43e
--- /dev/null
+++ b/spring-boot-autoconfiguration/src/main/java/com/baeldung/autoconfiguration/annotationprocessor/AnnotationProcessorApplication.java
@@ -0,0 +1,15 @@
+package com.baeldung.autoconfiguration.annotationprocessor;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.context.annotation.ComponentScan;
+
+import com.baeldung.autoconfiguration.MySQLAutoconfiguration;
+
+@EnableAutoConfiguration(exclude = { MySQLAutoconfiguration.class})
+@ComponentScan(basePackageClasses = {DatabaseProperties.class})
+public class AnnotationProcessorApplication {
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(AnnotationProcessorApplication.class).run();
+ }
+}
diff --git a/spring-boot-autoconfiguration/src/main/java/com/baeldung/autoconfiguration/annotationprocessor/DatabaseProperties.java b/spring-boot-autoconfiguration/src/main/java/com/baeldung/autoconfiguration/annotationprocessor/DatabaseProperties.java
new file mode 100644
index 0000000000..4fb5b408a2
--- /dev/null
+++ b/spring-boot-autoconfiguration/src/main/java/com/baeldung/autoconfiguration/annotationprocessor/DatabaseProperties.java
@@ -0,0 +1,73 @@
+package com.baeldung.autoconfiguration.annotationprocessor;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix = "database")
+public class DatabaseProperties {
+
+ public static class Server {
+
+ /**
+ * The IP of the database server
+ */
+ private String ip;
+
+ /**
+ * The Port of the database server.
+ * The Default value is 443.
+ * The allowed values are in the range 400-4000.
+ */
+ @Min(400)
+ @Max(800)
+ private int port = 443;
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+ }
+
+ private String username;
+ private String password;
+ private Server server;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public Server getServer() {
+ return server;
+ }
+
+ public void setServer(Server server) {
+ this.server = server;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-autoconfiguration/src/test/java/com/baeldung/autoconfiguration/annotationprocessor/DatabasePropertiesIntegrationTest.java b/spring-boot-autoconfiguration/src/test/java/com/baeldung/autoconfiguration/annotationprocessor/DatabasePropertiesIntegrationTest.java
new file mode 100644
index 0000000000..350e65b465
--- /dev/null
+++ b/spring-boot-autoconfiguration/src/test/java/com/baeldung/autoconfiguration/annotationprocessor/DatabasePropertiesIntegrationTest.java
@@ -0,0 +1,31 @@
+package com.baeldung.autoconfiguration.annotationprocessor;
+
+import org.junit.Assert;
+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.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = AnnotationProcessorApplication.class)
+@TestPropertySource("classpath:databaseproperties-test.properties")
+public class DatabasePropertiesIntegrationTest {
+
+ @Autowired
+ private DatabaseProperties databaseProperties;
+
+ @Test
+ public void whenSimplePropertyQueriedThenReturnsPropertyValue() throws Exception {
+ Assert.assertEquals("Incorrectly bound Username property", "baeldung", databaseProperties.getUsername());
+ Assert.assertEquals("Incorrectly bound Password property", "password", databaseProperties.getPassword());
+ }
+
+ @Test
+ public void whenNestedPropertyQueriedThenReturnsPropertyValue() throws Exception {
+ Assert.assertEquals("Incorrectly bound Server IP nested property", "127.0.0.1", databaseProperties.getServer().getIp());
+ Assert.assertEquals("Incorrectly bound Server Port nested property", 3306, databaseProperties.getServer().getPort());
+ }
+
+}
diff --git a/spring-boot-autoconfiguration/src/test/resources/databaseproperties-test.properties b/spring-boot-autoconfiguration/src/test/resources/databaseproperties-test.properties
new file mode 100644
index 0000000000..c0d1d1f158
--- /dev/null
+++ b/spring-boot-autoconfiguration/src/test/resources/databaseproperties-test.properties
@@ -0,0 +1,7 @@
+#Simple Properties
+database.username=baeldung
+database.password=password
+
+#Nested Properties
+database.server.ip=127.0.0.1
+database.server.port=3306
\ No newline at end of file