From 09095200dba5df6e022ae71e5fc8ac8828383bed Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 4 Jan 2020 14:28:44 +0200 Subject: [PATCH 01/20] Initial Commit --- open-liberty/pom.xml | 109 +++++ .../openliberty/SystemApplication.java | 9 + .../openliberty/SystemLivenessCheck.java | 29 ++ .../openliberty/SystemReadinessCheck.java | 32 ++ .../baeldung/openliberty/SystemResource.java | 26 ++ .../openliberty/hello/HelloServlet.java | 24 + .../src/main/liberty/config/server.xml | 24 + open-liberty/src/webapp/WEB-INF/web.xml | 10 + open-liberty/src/webapp/css/main.css | 426 ++++++++++++++++++ open-liberty/src/webapp/favicon.ico | Bin 0 -> 15086 bytes .../webapp/fonts/BunueloCleanPro-Light.otf | Bin 0 -> 113536 bytes .../webapp/fonts/BunueloCleanPro-SemiBold.otf | Bin 0 -> 116504 bytes .../src/webapp/img/carets/caret_down_blue.svg | 10 + .../webapp/img/carets/caret_down_green.svg | 10 + .../webapp/img/carets/caret_down_orange.svg | 10 + .../src/webapp/img/carets/caret_up_blue.svg | 10 + .../src/webapp/img/carets/caret_up_green.svg | 10 + .../src/webapp/img/carets/caret_up_orange.svg | 10 + open-liberty/src/webapp/img/config.svg | 20 + open-liberty/src/webapp/img/footer_main.png | Bin 0 -> 10291 bytes open-liberty/src/webapp/img/header_ufo.png | Bin 0 -> 18553 bytes open-liberty/src/webapp/img/health.svg | 16 + open-liberty/src/webapp/img/metrics.svg | 20 + open-liberty/src/webapp/img/sysProps.svg | 20 + open-liberty/src/webapp/img/systemDown.svg | 16 + open-liberty/src/webapp/img/systemUp.svg | 16 + open-liberty/src/webapp/index.html | 130 ++++++ open-liberty/src/webapp/js/mpData.js | 242 ++++++++++ 28 files changed, 1229 insertions(+) create mode 100644 open-liberty/pom.xml create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java create mode 100644 open-liberty/src/main/liberty/config/server.xml create mode 100755 open-liberty/src/webapp/WEB-INF/web.xml create mode 100755 open-liberty/src/webapp/css/main.css create mode 100755 open-liberty/src/webapp/favicon.ico create mode 100755 open-liberty/src/webapp/fonts/BunueloCleanPro-Light.otf create mode 100755 open-liberty/src/webapp/fonts/BunueloCleanPro-SemiBold.otf create mode 100755 open-liberty/src/webapp/img/carets/caret_down_blue.svg create mode 100755 open-liberty/src/webapp/img/carets/caret_down_green.svg create mode 100755 open-liberty/src/webapp/img/carets/caret_down_orange.svg create mode 100755 open-liberty/src/webapp/img/carets/caret_up_blue.svg create mode 100755 open-liberty/src/webapp/img/carets/caret_up_green.svg create mode 100755 open-liberty/src/webapp/img/carets/caret_up_orange.svg create mode 100755 open-liberty/src/webapp/img/config.svg create mode 100755 open-liberty/src/webapp/img/footer_main.png create mode 100755 open-liberty/src/webapp/img/header_ufo.png create mode 100755 open-liberty/src/webapp/img/health.svg create mode 100755 open-liberty/src/webapp/img/metrics.svg create mode 100755 open-liberty/src/webapp/img/sysProps.svg create mode 100755 open-liberty/src/webapp/img/systemDown.svg create mode 100755 open-liberty/src/webapp/img/systemUp.svg create mode 100755 open-liberty/src/webapp/index.html create mode 100755 open-liberty/src/webapp/js/mpData.js diff --git a/open-liberty/pom.xml b/open-liberty/pom.xml new file mode 100644 index 0000000000..f07d2aabb3 --- /dev/null +++ b/open-liberty/pom.xml @@ -0,0 +1,109 @@ + + + 4.0.0 + + com.baeldung + open-liberty + 1.0-SNAPSHOT + war + + + 1.8 + 1.8 + UTF-8 + UTF-8 + false + + 3.1 + 3.2.3 + 2.22.2 + 2.22.2 + + 9080 + 9443 + + + + + + jakarta.platform + jakarta.jakartaee-web-api + 8.0.0 + provided + + + org.eclipse.microprofile + microprofile + 3.0 + pom + provided + + + + org.junit.jupiter + junit-jupiter-engine + 5.5.2 + test + + + org.apache.cxf + cxf-rt-rs-client + 3.3.4 + test + + + org.apache.cxf + cxf-rt-rs-extension-providers + 3.3.4 + test + + + org.glassfish + javax.json + 1.1.4 + test + + + + javax.xml.bind + jaxb-api + 2.3.1 + test + + + + + ${project.artifactId} + + + + io.openliberty.tools + liberty-maven-plugin + ${version.liberty-maven-plugin} + + + org.apache.maven.plugins + maven-war-plugin + ${version.maven-war-plugin} + + + org.apache.maven.plugins + maven-surefire-plugin + ${version.maven-surefire-plugin} + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${version.maven-failsafe-plugin} + + + ${liberty.var.default.http.port} + + + + + + \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java new file mode 100644 index 0000000000..a755d0e5fa --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java @@ -0,0 +1,9 @@ +package com.baeldung.openliberty; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +@ApplicationPath("/system") +public class SystemApplication extends Application { + +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java new file mode 100644 index 0000000000..cf941cf0a1 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java @@ -0,0 +1,29 @@ +package com.baeldung.openliberty; + +import javax.enterprise.context.ApplicationScoped; + +import java.lang.management.MemoryMXBean; +import java.lang.management.ManagementFactory; + +import org.eclipse.microprofile.health.Liveness; +import org.eclipse.microprofile.health.HealthCheck; +import org.eclipse.microprofile.health.HealthCheckResponse; + +@Liveness +@ApplicationScoped +public class SystemLivenessCheck implements HealthCheck { + + @Override + public HealthCheckResponse call() { + MemoryMXBean memBean = ManagementFactory.getMemoryMXBean(); + long memUsed = memBean.getHeapMemoryUsage().getUsed(); + long memMax = memBean.getHeapMemoryUsage().getMax(); + + return HealthCheckResponse.named( + SystemResource.class.getSimpleName() + " liveness check") + .withData("memory used", memUsed) + .withData("memory max", memMax) + .state(memUsed < memMax * 0.9).build(); + } + +} \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java new file mode 100644 index 0000000000..567d02204b --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java @@ -0,0 +1,32 @@ +package com.baeldung.openliberty; + +import javax.enterprise.context.ApplicationScoped; + +import javax.inject.Inject; +import javax.inject.Provider; + +import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.eclipse.microprofile.health.Readiness; +import org.eclipse.microprofile.health.HealthCheck; +import org.eclipse.microprofile.health.HealthCheckResponse; +import org.eclipse.microprofile.health.HealthCheckResponseBuilder; + +@Readiness +@ApplicationScoped +public class SystemReadinessCheck implements HealthCheck { + + @Inject + @ConfigProperty(name = "io_openliberty_guides_system_inMaintenance") + Provider inMaintenance; + + @Override + public HealthCheckResponse call() { + HealthCheckResponseBuilder builder = HealthCheckResponse.named( + SystemResource.class.getSimpleName() + " readiness check"); + if (inMaintenance != null && inMaintenance.get().equalsIgnoreCase("true")) { + return builder.withData("services", "not available").down().build(); + } + return builder.withData("services", "available").up().build(); + } + +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java new file mode 100644 index 0000000000..10253161af --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java @@ -0,0 +1,26 @@ +package com.baeldung.openliberty; + +import javax.ws.rs.core.Response; + +import javax.enterprise.context.RequestScoped; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.eclipse.microprofile.metrics.annotation.Counted; +import org.eclipse.microprofile.metrics.annotation.Timed; + +@RequestScoped +@Path("/properties") +public class SystemResource { + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Timed(name = "getPropertiesTime", description = "Time needed to get the JVM system properties") + @Counted(absolute = true, description = "Number of times the JVM system properties are requested") + public Response getProperties() { + return Response.ok(System.getProperties()).build(); + } +} + diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java b/open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java new file mode 100644 index 0000000000..8232306f37 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java @@ -0,0 +1,24 @@ +package com.baeldung.openliberty.hello; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet(urlPatterns="/hello") +public class HelloServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.getWriter().append("Hello! How are you today?\n"); + } + + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + doGet(request, response); + } +} \ No newline at end of file diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml new file mode 100644 index 0000000000..6dfa7a8cb1 --- /dev/null +++ b/open-liberty/src/main/liberty/config/server.xml @@ -0,0 +1,24 @@ + + + jaxrs-2.1 + jsonp-1.1 + cdi-2.0 + mpMetrics-2.0 + mpHealth-2.0 + mpConfig-1.3 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/open-liberty/src/webapp/WEB-INF/web.xml b/open-liberty/src/webapp/WEB-INF/web.xml new file mode 100755 index 0000000000..a3823f10b7 --- /dev/null +++ b/open-liberty/src/webapp/WEB-INF/web.xml @@ -0,0 +1,10 @@ + + + Liberty Project + + + index.html + + \ No newline at end of file diff --git a/open-liberty/src/webapp/css/main.css b/open-liberty/src/webapp/css/main.css new file mode 100755 index 0000000000..7f4ea6a2e4 --- /dev/null +++ b/open-liberty/src/webapp/css/main.css @@ -0,0 +1,426 @@ +/******************************************************************************* +* Copyright (c) 2018 IBM Corporation and others. +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation - initial API and implementation +*******************************************************************************/ +@import url("https://fonts.googleapis.com/css?family=Asap:300,400,500"); + +@font-face { + font-family: BunueloLight; + src: url("/fonts/BunueloCleanPro-Light.woff"); +} + +@font-face { + font-family: BunueloSemiBold; + src: url("/fonts/BunueloCleanPro-SemiBold.woff"); +} + +body{ + font-family:Asap; + font-size: 16px; + color:#24243b; + background-color: white; + margin: 0px; +} + +section { + padding-top: 55px; + padding-left: 8%; + padding-right: 8%; + /* font-weight: 400; */ + letter-spacing:0; + text-align:left; +} + +.line { + margin-right: 200px; + height: 1px; + background-color: #C8D3D3; +} + +.headerImage { + background-image: url(/img/header_ufo.png); + background-repeat: no-repeat; + background-position: top 20px right 15px; + height: 103px; + margin-top: -94px; +} + +#whereTo { + padding-bottom: 80px; + width: 50%; +} + +p { + line-height: 22px; + margin-top: 0px; +} +h1 { + font-family:BunueloSemiBold; + font-size: 40px; + font-weight: 400; + letter-spacing:0; + text-align:left; +} +h2 { + font-size: 24px; + font-weight: 400; +} +h4 { + margin-top: 52px; +} +a { + text-decoration: none; +} + +#appIntro { + background-image:linear-gradient(#141427 0%, #2c2e50 100%); + background-size: 100% calc(100% - 70px); + background-repeat: no-repeat; +} + +#titleSection { + color: white; + margin-bottom: 80px; +} + +#appTitle { + font-family:BunueloLight; + font-size:55px; +} + +.headerRow { + height: 100px; + position:relative; + z-index:2; + box-shadow: 0 2px 4px 0 rgba(0,0,0,0.50); +} +.headerRow > div { + display: inline-block; +} + +.collapsibleRow { + transition: border 400ms ease-out, box-shadow 200ms linear; + cursor: pointer; +} +.collapsibleRow:hover .headerTitle { + background-color: #f4f4f4; + transition: background-color 0.1s; +} +.collapsed .collapsibleRow { + box-shadow: none; + border-bottom: 4px solid; +} +.collapsed#healthSection > .headerRow { + border-bottom-color: #D6D9E4; +} +.collapsed#configSection > .headerRow { + border-bottom-color: #F8D7C1; +} +.collapsed#metricsSection > .headerRow { + border-bottom-color: #EEF3C3; +} + +.collapsed .collapsibleContent { /* collapsing animation */ + transition: all 400ms ease-out, opacity 300ms ease-in; +} +.expanded .collapsibleContent { /* expanding animation */ + transition: all 400ms ease-out, opacity 450ms ease-out; +} +.collapsed .collapsibleContent { + opacity: 0; + max-height: 0; + visibility: hidden; +} +.expanded .collapsibleContent { + opacity: 1; + max-height: 1000px; + visibility: visible; +} + +.headerIcon { + width: 160px; + height: 100%; + float: left; + background-color: #E8EAEF; +} +.headerIcon img { + display:block; + margin:auto; + margin-top: 20px; +} + +#healthSection .headerIcon { + background-color: #E8EAEF; +} +#configSection .headerIcon { + background-color: #FDE4D1; +} +#metricsSection .headerIcon { + background-color: #F5F8DA; +} + +.headerTitle { + background-color: white; + color:#5d6a8e; + letter-spacing:0; + text-align:left; + padding-left: 40px; + padding-top: 10px; + width: calc(100% - 200px); /* 160 from icon, 40 from padding */ +} +#healthSection h2 { + color: #5D6A8E; +} +#configSection h2 { + color: #E57000; +} +#metricsSection h2 { + color: #4F6700; +} + +#sysPropTitle { + padding-top: 28px; +} + +.headerTitle > h2 { + font-family: BunueloLight; + font-size:40px; + margin: 0; +} + +.caret { + position: absolute; + right: 45px; + top: 45px; +} + +.collapsed#configSection .caret { + background-image: url("../img/carets/caret_down_orange.svg") +} +.expanded#configSection .caret { + background-image: url("../img/carets/caret_up_orange.svg") +} + +.msSection { + background: white; + box-shadow: 0 2px 4px 0 rgba(63,70,89,0.31); +} + +.sectionContent { + margin-left: 160px; +} + +#systemPropertiesTable { + padding-left: 160px; + background: white; +} + +button { + border-radius:100px; + height:44px; + color:#24253a; + text-align:center; + font-family: Asap; + margin-top: 25px; + margin-bottom: 70px; + cursor: pointer; + border: none; +} + +button a { + text-decoration: none; + color:#F4914D; +} + +#guidesButton { + background-color:#abd155; + width:269px; + font-weight: 500; + font-size:16px; + transition: background-color .2s; +} +#guidesButton:hover { + background-color: #C7EE63; +} +#mpGuidesButton { + border:2px solid #f4914d8c; + border-radius:100px; + font-size:20px; + letter-spacing:0; + padding-left: 40px; + padding-right: 40px; + background-color: white; + transition: background-color .2s, color .2s; +} +#mpGuidesButton:hover { + background-color: #f4914d; + color: white; +} + +section#openLibertyAndMp { + background:#f4f4f5; + background-size: 100% calc(100% - 70px); + background-repeat: no-repeat; +} + +#healthBox { + text-align: left; + display: table-cell; + vertical-align: middle; + width: 47%; +} + +#healthBox > div { + display: table-cell; + vertical-align: middle; +} + +#healthIcon { + padding-left: 73px; + padding-top: 56px; + padding-bottom: 56px; +} +#healthStatusIcon { + width: 104px; + height: 104px; +} + +#healthText { + padding: 50px; +} + +#serviceStatus { + font-size: 50px; + font-family:BunueloLight; + margin-top: 30px; +} + +#healthNote { + text-align: left; + display: table-cell; + vertical-align: middle; + padding-left: 43px; + line-height: 26px; + width: 53%; +} + +table { + width: 100%; + font-size: 14px; + text-align: left; + border-collapse: collapse; +} + +th { + height: 63px; + padding-left: 41px; + font-size: 16px; +} +tr { + height: 45px; +} +td { + padding-left: 41px; +} +#systemPropertiesTable tr:first-child { + background: #D6D9E4; +} +#configTable tr:first-child { + background: #F8D7C1;; +} +#metricsTable tr:first-child { + background: #EEF3C3; +} + +#systemPropertiesTable tr:nth-child(2n+3) { + background: #EEEFF3; +} +#configTable tr:nth-child(2n+2) { + background: #FEF8F4; +} +#metricsTable tr:nth-child(2n+2) { + background: #FBFCEE; +} + +#systemPropertiesTable .sourceRow, +#healthTable .sourceRow { + border-top: 4px solid #D6D9E4; +} +#systemPropertiesTable .sourceRow a, +#healthTable .sourceRow a { + color: #5D6A8E; +} +#configTable .sourceRow { + border-top: 4px solid #F8D7C1; +} +#configTable .sourceRow a { + color: #E57000; +} +#metricsTable .sourceRow { + border-top: 4px solid #EEF3C3; +} +#metricsTable .sourceRow a { + color: #4F6700; +} +.sourceRow a { + font-weight: 500; +} + +#learnMore { + margin-top: 120px; + padding: 0px 200px 100px; +} + +#learnMore > h2 { + color:#5e6b8d; +} + +.bodyFooter { + padding: 5px 8%; + background-image: url(/img/footer_main.png); + background-repeat: no-repeat; + background-position: top 20px right 110px; + margin-bottom: 40px; + margin-top: 50px; + color: #3F4659; +} + +.bodyFooterLink { + font-family: Asap; + font-weight: 300; + font-size: 14px; + letter-spacing: 0; + border-bottom: solid 1px #C8D3D3; + margin-top: 30px; + margin-right: 130px; + padding-bottom: 5px; + padding-right: 50px; + text-align: right; +} + +.bodyFooterLink > a { + text-decoration: none; + padding: 10px; + color: #96bc32; +} + +#licenseLink { + color: #5E6B8D; + text-align: left; +} + +#footer_text { + margin-top: 4px; + margin-bottom: 4px; + font-size: 16px; +} + +#footer_copyright { + font-size: 11px; +} diff --git a/open-liberty/src/webapp/favicon.ico b/open-liberty/src/webapp/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..c8652f35e0552d6ea391e0202f15cd5dbb63f5da GIT binary patch literal 15086 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 THA598yDCa{Q + + + + + diff --git a/open-liberty/src/webapp/img/carets/caret_down_green.svg b/open-liberty/src/webapp/img/carets/caret_down_green.svg new file mode 100755 index 0000000000..22dd4468a5 --- /dev/null +++ b/open-liberty/src/webapp/img/carets/caret_down_green.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/open-liberty/src/webapp/img/carets/caret_down_orange.svg b/open-liberty/src/webapp/img/carets/caret_down_orange.svg new file mode 100755 index 0000000000..33d588a50c --- /dev/null +++ b/open-liberty/src/webapp/img/carets/caret_down_orange.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/open-liberty/src/webapp/img/carets/caret_up_blue.svg b/open-liberty/src/webapp/img/carets/caret_up_blue.svg new file mode 100755 index 0000000000..b1346d6a1a --- /dev/null +++ b/open-liberty/src/webapp/img/carets/caret_up_blue.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/open-liberty/src/webapp/img/carets/caret_up_green.svg b/open-liberty/src/webapp/img/carets/caret_up_green.svg new file mode 100755 index 0000000000..425fd6a0b3 --- /dev/null +++ b/open-liberty/src/webapp/img/carets/caret_up_green.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/open-liberty/src/webapp/img/carets/caret_up_orange.svg b/open-liberty/src/webapp/img/carets/caret_up_orange.svg new file mode 100755 index 0000000000..fe353cb2fd --- /dev/null +++ b/open-liberty/src/webapp/img/carets/caret_up_orange.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/open-liberty/src/webapp/img/config.svg b/open-liberty/src/webapp/img/config.svg new file mode 100755 index 0000000000..4eaf794a50 --- /dev/null +++ b/open-liberty/src/webapp/img/config.svg @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/open-liberty/src/webapp/img/footer_main.png b/open-liberty/src/webapp/img/footer_main.png new file mode 100755 index 0000000000000000000000000000000000000000..1194702684bb3022b384a161b2c082803136fab8 GIT binary patch literal 10291 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 + + + + + + + + + + + diff --git a/open-liberty/src/webapp/img/metrics.svg b/open-liberty/src/webapp/img/metrics.svg new file mode 100755 index 0000000000..f7287fd045 --- /dev/null +++ b/open-liberty/src/webapp/img/metrics.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/open-liberty/src/webapp/img/sysProps.svg b/open-liberty/src/webapp/img/sysProps.svg new file mode 100755 index 0000000000..3ba129fc7e --- /dev/null +++ b/open-liberty/src/webapp/img/sysProps.svg @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/open-liberty/src/webapp/img/systemDown.svg b/open-liberty/src/webapp/img/systemDown.svg new file mode 100755 index 0000000000..9f9929b52f --- /dev/null +++ b/open-liberty/src/webapp/img/systemDown.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/open-liberty/src/webapp/img/systemUp.svg b/open-liberty/src/webapp/img/systemUp.svg new file mode 100755 index 0000000000..b0c1e9190c --- /dev/null +++ b/open-liberty/src/webapp/img/systemUp.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/open-liberty/src/webapp/index.html b/open-liberty/src/webapp/index.html new file mode 100755 index 0000000000..c683a2f5b2 --- /dev/null +++ b/open-liberty/src/webapp/index.html @@ -0,0 +1,130 @@ + + + + + + + + +
+
+

System Properties Sample

+
+
+

Congrats on your shiny, new Open Liberty sample app!

+

This sample app uses a System Properties microservice to return the properties of the system that you're running.

+
+ +
+
+
+

System Properties

+
+
+ + + + +
PropertiesValue
+
+
+ +
+ +
+

This sample app, running on Open Liberty, uses a microservice to get the system properties from your laptop and displays them in your browser. It also displays health information about the microservice (or it will when you've added the capability) and metrics for the microservice. Scroll down to learn more.

+
+ +
+
+

Where to next, captain?

+

Set course for the Open Liberty guides!

+

All of the info you need to continue your journey is here, laid out in easy to follow steps and examples. Searching our current selection makes it easy to find the guide that will help make your next project a reality.

+ +
+ + + + + + diff --git a/open-liberty/src/webapp/js/mpData.js b/open-liberty/src/webapp/js/mpData.js new file mode 100755 index 0000000000..e3c6e236fd --- /dev/null +++ b/open-liberty/src/webapp/js/mpData.js @@ -0,0 +1,242 @@ +/******************************************************************************* +* Copyright (c) 2018, 2019 IBM Corporation and others. +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation - initial API and implementation +*******************************************************************************/ +function displayMetrics() { + getSystemMetrics(); +} + +function getSystemMetrics() { + var url = "http://localhost:9080/metrics"; + var req = new XMLHttpRequest(); + + var metricToDisplay = {}; + metricToDisplay["application_getProperties_total"] = "Request Count"; + metricToDisplay["application_io_openliberty_sample_system_SystemResource_getPropertiesTime_one_min_rate_per_second"] = "Min Request Time (ms)"; + metricToDisplay["application_io_openliberty_sample_system_SystemResource_getPropertiesTime_mean_seconds"] = "Mean Request Time (ms)"; + metricToDisplay["application_io_openliberty_sample_system_SystemResource_getPropertiesTime_max_seconds"] = "Max Request Time (ms)"; + metricToDisplay["base_cpu_processCpuLoad_percent"] = "System CPU Usage (%)"; + metricToDisplay["base_memory_usedHeap_bytes"] = "System Heap Usage (MB)"; + + var metricToMatch = "^("; + for (var metricKey in metricToDisplay) { + metricToMatch += metricKey + "|" + } + // remove the last | + metricToMatch = metricToMatch.substring(0, metricToMatch.length-1); + metricToMatch += ")\\s*(\\S*)$" + + req.onreadystatechange = function() { + if (req.readyState != 4) return; // Not there yet + if (req.status != 200) { + document.getElementById("metricsText").innerHTML = req.statusText; + return; + } + + var resp = req.responseText; + var regexpToMatch = new RegExp(metricToMatch, "gm"); + var matchMetrics = resp.match(regexpToMatch); + + var keyValPairs = {}; + for (var metricKey in metricToDisplay) { + matchMetrics.forEach(function(line) { + var keyToMatch = metricKey + " (.*)"; + var keyVal = line.match(new RegExp(keyToMatch)); + if (keyVal) { + var val = keyVal[1]; + if (metricKey.indexOf("application:io_openliberty_sample_system_system_resource_get_properties_time") === 0) { + val = val * 1000; + } else if (metricKey.indexOf("base:memory_used_heap_bytes") === 0) { + val = val / 1000000; + } + keyValPairs[metricToDisplay[metricKey]] = val; + } + }) + } + + var table = document.getElementById("metricsTableBody"); + for (key in keyValPairs) { + var row = document.createElement("tr"); + var keyData = document.createElement("td"); + keyData.innerText = key; + var valueData = document.createElement("td"); + valueData.innerText = keyValPairs[key]; + row.appendChild(keyData); + row.appendChild(valueData); + table.appendChild(row); + } + + addSourceRow(table, url); + }; + + req.open("GET", url, true); + req.send(); +} + +function displaySystemProperties() { + getSystemPropertiesRequest(); +} + +function getSystemPropertiesRequest() { + var propToDisplay = ["java.vendor", "java.version", "user.name", "os.name", "wlp.install.dir", "wlp.server.name" ]; + var url = "http://localhost:9080/system/properties"; + var req = new XMLHttpRequest(); + var table = document.getElementById("systemPropertiesTable"); + // Create the callback: + req.onreadystatechange = function () { + if (req.readyState != 4) return; // Not there yet + displayMetrics(); + if (req.status != 200) { + table.innerHTML = ""; + var row = document.createElement("tr"); + var th = document.createElement("th"); + th.innerText = req.statusText; + row.appendChild(th); + table.appendChild(row); + + addSourceRow(table, url); + return; + } + // Request successful, read the response + var resp = JSON.parse(req.responseText); + for (var i = 0; i < propToDisplay.length; i++) { + var key = propToDisplay[i]; + if (resp.hasOwnProperty(key)) { + var row = document.createElement("tr"); + var keyData = document.createElement("td"); + keyData.innerText = key; + var valueData = document.createElement("td"); + valueData.innerText = resp[key]; + row.appendChild(keyData); + row.appendChild(valueData); + table.appendChild(row); + } + } + + addSourceRow(table, url); + }; + req.open("GET", url, true); + req.send(); +} + +function displayHealth() { + getHealth(); +} + +function getHealth() { + var url = "http://localhost:9080/health"; + var req = new XMLHttpRequest(); + + var healthBox = document.getElementById("healthBox"); + var serviceName = document.getElementById("serviceName"); + var healthStatus = document.getElementById("serviceStatus"); + var healthIcon = document.getElementById("healthStatusIconImage"); + + req.onreadystatechange = function () { + if (req.readyState != 4) return; // Not there yet + + // Request successful, read the response + if (req.responseText) { + var resp = JSON.parse(req.responseText); + var service = resp.checks[0]; //TODO: use for loop for multiple services + + resp.checks.forEach(function (service) { + serviceName.innerText = service.name; + healthStatus.innerText = service.status; + + if (service.status === "UP") { + healthBox.style.backgroundColor = "#f0f7e1"; + healthIcon.setAttribute("src", "img/systemUp.svg"); + } else { + healthBox.style.backgroundColor = "#fef7f2"; + healthIcon.setAttribute("src", "img/systemDown.svg"); + } + }); + } + var table = document.getElementById("healthTable"); + + addSourceRow(table, url); + }; + req.open("GET", url, true); + req.send(); +} + +function displayConfigProperties() { + getConfigPropertiesRequest(); +} + +function getConfigPropertiesRequest() { + var url = "http://localhost:9080/config"; + var req = new XMLHttpRequest(); + + var configToDisplay = {}; + configToDisplay["io_openliberty_sample_system_inMaintenance"] = "System In Maintenance"; + configToDisplay["io_openliberty_sample_testConfigOverwrite"] = "Test Config Overwrite"; + configToDisplay["io_openliberty_sample_port_number"] = "Port Number"; + // Create the callback: + req.onreadystatechange = function () { + if (req.readyState != 4) return; // Not there yet + if (req.status != 200) { + return; + } + + // Request successful, read the response + var resp = JSON.parse(req.responseText); + var configProps = resp["ConfigProperties"]; + var table = document.getElementById("configTableBody"); + for (key in configProps) { + var row = document.createElement("tr"); + var keyData = document.createElement("td"); + keyData.innerText = configToDisplay[key]; + var valueData = document.createElement("td"); + valueData.innerText = configProps[key]; + row.appendChild(keyData); + row.appendChild(valueData); + table.appendChild(row); + } + + addSourceRow(table, url); + } + req.open("GET", url, true); + req.send(); +} + +function toggle(e) { + var callerElement; + if (!e) { + if (window.event) { + e = window.event; + callerElement = e.currentTarget; + } else { + callerElement = window.toggle.caller.arguments[0].currentTarget; // for firefox + } + } + + var classes = callerElement.parentElement.classList; + var collapsed = classes.contains("collapsed"); + var caretImg = callerElement.getElementsByClassName("caret")[0]; + var caretImgSrc = caretImg.getAttribute("src"); + if (collapsed) { // expand the section + classes.replace("collapsed", "expanded"); + caretImg.setAttribute("src", caretImgSrc.replace("down", "up")); + } else { // collapse the section + classes.replace("expanded", "collapsed"); + caretImg.setAttribute("src", caretImgSrc.replace("up", "down")); + } +} + +function addSourceRow(table, url) { + var sourceRow = document.createElement("tr"); + sourceRow.classList.add("sourceRow"); + var sourceText = document.createElement("td"); + sourceText.setAttribute("colspan", "100%"); + sourceText.innerHTML = "API Source\: "+url+""; + sourceRow.appendChild(sourceText); + table.appendChild(sourceRow); +} From 16f7133f211e8c619fb171db123ede8319142948 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Thu, 9 Jan 2020 11:25:29 +0200 Subject: [PATCH 02/20] Stash changes --- open-liberty/pom.xml | 213 +++++++++--------- ...emApplication.java => ApiApplication.java} | 4 +- .../openliberty/SystemLivenessCheck.java | 29 --- .../openliberty/SystemReadinessCheck.java | 32 --- .../baeldung/openliberty/SystemResource.java | 26 --- .../HelloServlet.java => app/AppServlet.java} | 8 +- .../openliberty/user/UserResource.java | 50 ++++ .../openliberty/user/UserService.java | 18 ++ .../openliberty/user/dao/UserDao.java | 42 ++++ .../baeldung/openliberty/user/model/User.java | 63 ++++++ .../src/main/liberty/config/server.xml | 61 +++-- .../main/resources/META-INF/persistence.xml | 24 ++ .../META-INF/microprofile-config.properties | 0 13 files changed, 359 insertions(+), 211 deletions(-) rename open-liberty/src/main/java/com/baeldung/openliberty/{SystemApplication.java => ApiApplication.java} (58%) delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java rename open-liberty/src/main/java/com/baeldung/openliberty/{hello/HelloServlet.java => app/AppServlet.java} (69%) create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java create mode 100644 open-liberty/src/main/resources/META-INF/persistence.xml create mode 100644 open-liberty/src/webapp/META-INF/microprofile-config.properties diff --git a/open-liberty/pom.xml b/open-liberty/pom.xml index f07d2aabb3..b2ed213af6 100644 --- a/open-liberty/pom.xml +++ b/open-liberty/pom.xml @@ -1,109 +1,120 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.baeldung - open-liberty - 1.0-SNAPSHOT - war + com.baeldung + open-liberty + 1.0-SNAPSHOT + war - - 1.8 - 1.8 - UTF-8 - UTF-8 - false - - 3.1 - 3.2.3 - 2.22.2 - 2.22.2 - - 9080 - 9443 - + + 1.8 + 1.8 + UTF-8 + UTF-8 + false + + 3.1 + 3.2.3 + 2.22.2 + 2.22.2 + + 9080 + 9443 + openliberty + - - - - jakarta.platform - jakarta.jakartaee-web-api - 8.0.0 - provided + + + org.apache.derby + derby + 10.14.2.0 + + + com.h2database + h2 + 1.4.186 - - org.eclipse.microprofile - microprofile - 3.0 - pom - provided - - - - org.junit.jupiter - junit-jupiter-engine - 5.5.2 - test - - - org.apache.cxf - cxf-rt-rs-client - 3.3.4 - test - - - org.apache.cxf - cxf-rt-rs-extension-providers - 3.3.4 - test - - - org.glassfish - javax.json - 1.1.4 - test - - - - javax.xml.bind - jaxb-api - 2.3.1 - test - - + + + jakarta.platform + jakarta.jakartaee-web-api + 8.0.0 + provided + + + org.eclipse.microprofile + microprofile + 3.0 + pom + provided + + + + org.junit.jupiter + junit-jupiter-engine + 5.5.2 + test + + + org.apache.cxf + cxf-rt-rs-client + 3.3.4 + test + + + org.apache.cxf + cxf-rt-rs-extension-providers + 3.3.4 + test + + + org.glassfish + javax.json + 1.1.4 + test + + + + javax.xml.bind + jaxb-api + 2.3.1 + test + + - - ${project.artifactId} - - - - io.openliberty.tools - liberty-maven-plugin - ${version.liberty-maven-plugin} - - - org.apache.maven.plugins - maven-war-plugin - ${version.maven-war-plugin} - - - org.apache.maven.plugins - maven-surefire-plugin - ${version.maven-surefire-plugin} - - - - org.apache.maven.plugins - maven-failsafe-plugin - ${version.maven-failsafe-plugin} - - - ${liberty.var.default.http.port} - - - - - + + ${project.artifactId} + + + + io.openliberty.tools + liberty-maven-plugin + ${version.liberty-maven-plugin} + + + org.apache.maven.plugins + maven-war-plugin + ${version.maven-war-plugin} + + + org.apache.maven.plugins + maven-surefire-plugin + ${version.maven-surefire-plugin} + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${version.maven-failsafe-plugin} + + + ${liberty.var.default.http.port} + + + + + \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java b/open-liberty/src/main/java/com/baeldung/openliberty/ApiApplication.java similarity index 58% rename from open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java rename to open-liberty/src/main/java/com/baeldung/openliberty/ApiApplication.java index a755d0e5fa..92855b5876 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/SystemApplication.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/ApiApplication.java @@ -3,7 +3,7 @@ package com.baeldung.openliberty; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; -@ApplicationPath("/system") -public class SystemApplication extends Application { +@ApplicationPath("/api") +public class ApiApplication extends Application { } diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java deleted file mode 100644 index cf941cf0a1..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/SystemLivenessCheck.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.openliberty; - -import javax.enterprise.context.ApplicationScoped; - -import java.lang.management.MemoryMXBean; -import java.lang.management.ManagementFactory; - -import org.eclipse.microprofile.health.Liveness; -import org.eclipse.microprofile.health.HealthCheck; -import org.eclipse.microprofile.health.HealthCheckResponse; - -@Liveness -@ApplicationScoped -public class SystemLivenessCheck implements HealthCheck { - - @Override - public HealthCheckResponse call() { - MemoryMXBean memBean = ManagementFactory.getMemoryMXBean(); - long memUsed = memBean.getHeapMemoryUsage().getUsed(); - long memMax = memBean.getHeapMemoryUsage().getMax(); - - return HealthCheckResponse.named( - SystemResource.class.getSimpleName() + " liveness check") - .withData("memory used", memUsed) - .withData("memory max", memMax) - .state(memUsed < memMax * 0.9).build(); - } - -} \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java deleted file mode 100644 index 567d02204b..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/SystemReadinessCheck.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.openliberty; - -import javax.enterprise.context.ApplicationScoped; - -import javax.inject.Inject; -import javax.inject.Provider; - -import org.eclipse.microprofile.config.inject.ConfigProperty; -import org.eclipse.microprofile.health.Readiness; -import org.eclipse.microprofile.health.HealthCheck; -import org.eclipse.microprofile.health.HealthCheckResponse; -import org.eclipse.microprofile.health.HealthCheckResponseBuilder; - -@Readiness -@ApplicationScoped -public class SystemReadinessCheck implements HealthCheck { - - @Inject - @ConfigProperty(name = "io_openliberty_guides_system_inMaintenance") - Provider inMaintenance; - - @Override - public HealthCheckResponse call() { - HealthCheckResponseBuilder builder = HealthCheckResponse.named( - SystemResource.class.getSimpleName() + " readiness check"); - if (inMaintenance != null && inMaintenance.get().equalsIgnoreCase("true")) { - return builder.withData("services", "not available").down().build(); - } - return builder.withData("services", "available").up().build(); - } - -} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java deleted file mode 100644 index 10253161af..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/SystemResource.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.openliberty; - -import javax.ws.rs.core.Response; - -import javax.enterprise.context.RequestScoped; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -import org.eclipse.microprofile.metrics.annotation.Counted; -import org.eclipse.microprofile.metrics.annotation.Timed; - -@RequestScoped -@Path("/properties") -public class SystemResource { - - @GET - @Produces(MediaType.APPLICATION_JSON) - @Timed(name = "getPropertiesTime", description = "Time needed to get the JVM system properties") - @Counted(absolute = true, description = "Number of times the JVM system properties are requested") - public Response getProperties() { - return Response.ok(System.getProperties()).build(); - } -} - diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java b/open-liberty/src/main/java/com/baeldung/openliberty/app/AppServlet.java similarity index 69% rename from open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java rename to open-liberty/src/main/java/com/baeldung/openliberty/app/AppServlet.java index 8232306f37..526e13c0e9 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/hello/HelloServlet.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/app/AppServlet.java @@ -1,4 +1,4 @@ -package com.baeldung.openliberty.hello; +package com.baeldung.openliberty.app; import java.io.IOException; @@ -8,13 +8,13 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -@WebServlet(urlPatterns="/hello") -public class HelloServlet extends HttpServlet { +@WebServlet(urlPatterns="/app") +public class AppServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.getWriter().append("Hello! How are you today?\n"); + response.getWriter().append("Open Liberty: greet

Hello! Welcome to Open Liberty

"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java new file mode 100644 index 0000000000..86f2709f4d --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java @@ -0,0 +1,50 @@ +package com.baeldung.openliberty.user; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; +import javax.ws.rs.Consumes; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import com.baeldung.openliberty.user.dao.UserDao; +import com.baeldung.openliberty.user.model.User; + +@RequestScoped +@Path("user") +public class UserResource { + + @Inject + UserService userService; + + @Inject + private UserDao userDAO; + + @GET + @Produces(MediaType.APPLICATION_JSON) + public User getUser() { + return userService.getUser(); + } + + /** + * This method creates a new user from the submitted data (firstName, lastName and + * email) + */ + @POST + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Transactional + public Response addNewUser(@FormParam("firstName") String firstName, + @FormParam("lastName") String lastName, @FormParam("email") String email) { + System.out.println(firstName); + System.out.println(lastName); + System.out.println(email); + User newUser = new User(firstName, lastName, email); + userDAO.createUser(newUser); + return Response.status(Response.Status.NO_CONTENT).build(); + } +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java new file mode 100644 index 0000000000..4c79b9057f --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java @@ -0,0 +1,18 @@ +package com.baeldung.openliberty.user; + +import javax.enterprise.context.ApplicationScoped; + +import com.baeldung.openliberty.user.model.User; + +@ApplicationScoped +public class UserService { + + public User getUser() { + User user = new User(); + user.setFirstName("Norman"); + user.setLastName("Lewis"); + user.setEmail("normanlewis@email.com"); + return user; + } + +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java new file mode 100644 index 0000000000..4c006db4d7 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java @@ -0,0 +1,42 @@ +package com.baeldung.openliberty.user.dao; +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import com.baeldung.openliberty.user.model.User; + +import javax.enterprise.context.RequestScoped; + +@RequestScoped +public class UserDao { + + @PersistenceContext(name = "jpa-unit") + private EntityManager em; + + public void createUser(User user) { + em.persist(user); + } + + public User readUser(int userId) { + return em.find(User.class, userId); + } + + public void updateUser(User user) { + em.merge(user); + } + + public void deleteUser(User user) { + em.remove(user); + } + + public List readAllUsers() { + return em.createNamedQuery("User.findAll", User.class).getResultList(); + } + + public List findUser(String name, String location, String time) { + return em.createNamedQuery("User.findUser", User.class) + .setParameter("name", name) + .setParameter("location", location) + .setParameter("time", time).getResultList(); + } +} \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java new file mode 100644 index 0000000000..6c49c95bf7 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java @@ -0,0 +1,63 @@ +package com.baeldung.openliberty.user.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "Event") +public class User { + + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + @Column(name = "id") + private int id; + + @Column(name = "first_name") + private String firstName; + + @Column(name = "last_name") + private String lastName; + + @Column(name = "email") + private String email; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public User(String firstName, String lastName, String email) { + super(); + this.firstName = firstName; + this.lastName = lastName; + this.email = email; + } + + public User() { + super(); + } + +} diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index 6dfa7a8cb1..a83c0b462c 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -1,24 +1,51 @@ - - jaxrs-2.1 - jsonp-1.1 - cdi-2.0 - mpMetrics-2.0 - mpHealth-2.0 - mpConfig-1.3 - + + appSecurity-2.0 + jaxrs-2.1 + jsonp-1.1 + cdi-2.0 + jpa-2.2 + mpMetrics-2.0 + mpHealth-2.0 + mpConfig-1.3 + restConnector-2.0 + jdbc-4.2 + - - - + + - - - + + - + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/open-liberty/src/main/resources/META-INF/persistence.xml b/open-liberty/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000000..1ad7dd2bd8 --- /dev/null +++ b/open-liberty/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,24 @@ + + + + + org.eclipse.persistence.jpa.PersistenceProvider + + jdbc/h2test + + false + + \ No newline at end of file diff --git a/open-liberty/src/webapp/META-INF/microprofile-config.properties b/open-liberty/src/webapp/META-INF/microprofile-config.properties new file mode 100644 index 0000000000..e69de29bb2 From 6d517ce9fbb5332e6b3e0d3f83695173888da730 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Fri, 17 Jan 2020 15:55:22 +0200 Subject: [PATCH 03/20] Open Liberty with Servlet, Rest, Consume rest using json-b, microprofile --- open-liberty/pom.xml | 132 ++++++++++-------- .../openliberty/person/dao/PersonDao.java | 24 ++++ .../openliberty/person/model/Person.java | 61 ++++++++ .../person/resource/PersonResource.java | 68 +++++++++ .../{ => rest}/ApiApplication.java | 2 +- .../rest/consumes/PersonClient.java | 20 +++ .../rest/consumes/RestConsumer.java | 32 +++++ .../rest/consumes/UriNotFoundException.java | 14 ++ .../consumes/UriNotFoundExceptionMapper.java | 23 +++ .../{app => servlet}/AppServlet.java | 9 +- .../openliberty/user/UserResource.java | 50 ------- .../openliberty/user/UserService.java | 18 --- .../openliberty/user/dao/UserDao.java | 42 ------ .../baeldung/openliberty/user/model/User.java | 63 --------- .../src/main/liberty/config/server.xml | 69 ++++----- .../main/resources/META-INF/persistence.xml | 28 ++-- .../baeldung/openliberty/RestClientTest.java | 51 +++++++ .../META-INF/microprofile-config.properties | 1 + 18 files changed, 406 insertions(+), 301 deletions(-) create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/person/dao/PersonDao.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java rename open-liberty/src/main/java/com/baeldung/openliberty/{ => rest}/ApiApplication.java (79%) create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java create mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java rename open-liberty/src/main/java/com/baeldung/openliberty/{app => servlet}/AppServlet.java (70%) delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java create mode 100644 open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java diff --git a/open-liberty/pom.xml b/open-liberty/pom.xml index b2ed213af6..157029330b 100644 --- a/open-liberty/pom.xml +++ b/open-liberty/pom.xml @@ -9,78 +9,55 @@ 1.0-SNAPSHOT war - - 1.8 - 1.8 - UTF-8 - UTF-8 - false - - 3.1 - 3.2.3 - 2.22.2 - 2.22.2 - - 9080 - 9443 - openliberty - - - - org.apache.derby - derby - 10.14.2.0 - - - com.h2database - h2 - 1.4.186 - - jakarta.platform jakarta.jakartaee-web-api - 8.0.0 + ${version.jakarta.jakartaee-web-api} provided org.eclipse.microprofile microprofile - 3.0 + ${version.microprofile} pom provided + + org.apache.derby + derby + ${version.derby} + + - org.junit.jupiter - junit-jupiter-engine - 5.5.2 + junit + junit + ${version.junit} + test + + + org.eclipse + yasson + ${version.yasson} test org.apache.cxf cxf-rt-rs-client - 3.3.4 - test - - - org.apache.cxf - cxf-rt-rs-extension-providers - 3.3.4 + ${version.cxf-rt-rs-client} test org.glassfish javax.json - 1.1.4 + ${version.javax.json} test - - javax.xml.bind - jaxb-api - 2.3.1 + org.apache.cxf + cxf-rt-rs-mp-client + ${version.cxf-rt-rs-mp-client} test @@ -94,27 +71,60 @@ liberty-maven-plugin ${version.liberty-maven-plugin} + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven-dependency-plugin} + + + copy-derby-dependency + package + + copy-dependencies + + + derby + ${project.build.directory}/liberty/wlp/usr/shared/resources/ + + ${testServerHttpPort} + + + + + org.apache.maven.plugins maven-war-plugin ${version.maven-war-plugin} - - org.apache.maven.plugins - maven-surefire-plugin - ${version.maven-surefire-plugin} - - - - org.apache.maven.plugins - maven-failsafe-plugin - ${version.maven-failsafe-plugin} - - - ${liberty.var.default.http.port} - - - + + + + 1.8 + 1.8 + UTF-8 + UTF-8 + false + + + 8.0.0 + 3.2 + 10.14.2.0 + 3.1 + 2.10 + 3.2.3 + 4.12 + 1.0.5 + 3.2.6 + 1.0.4 + 3.3.1 + + + openliberty + 9080 + 9443 + 9080 + \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/dao/PersonDao.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/dao/PersonDao.java new file mode 100644 index 0000000000..e2d408d8b0 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/dao/PersonDao.java @@ -0,0 +1,24 @@ +package com.baeldung.openliberty.person.dao; + +import javax.enterprise.context.RequestScoped; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import com.baeldung.openliberty.person.model.Person; + +@RequestScoped +public class PersonDao { + + @PersistenceContext(name = "jpa-unit") + private EntityManager em; + + public Person createPerson(Person person) { + em.persist(person); + return person; + } + + public Person readPerson(int personId) { + return em.find(Person.class, personId); + } + +} \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java new file mode 100644 index 0000000000..e506fd005b --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java @@ -0,0 +1,61 @@ +package com.baeldung.openliberty.person.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; + +@Entity +public class Person { + + @GeneratedValue(strategy = GenerationType.AUTO) + @Id + private int id; + + @NotBlank + private String username; + + @Email + private String email; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Person(int id, @NotBlank String username, @Email String email) { + super(); + this.id = id; + this.username = username; + this.email = email; + } + + public Person() { + super(); + } + + public String toString() { + return this.id + ":" +this.username; + } +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java new file mode 100644 index 0000000000..a729805e13 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java @@ -0,0 +1,68 @@ +package com.baeldung.openliberty.person.resource; + +import java.util.Set; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.validation.Validator; +import javax.validation.ConstraintViolation; +import javax.transaction.Transactional; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import com.baeldung.openliberty.person.dao.PersonDao; +import com.baeldung.openliberty.person.model.Person; + +@RequestScoped +@Path("person") +public class PersonResource { + + @Inject + private PersonDao personDao; + + @Inject + Validator validator; + + @GET + @Produces(MediaType.APPLICATION_JSON) + public Person getPerson() { + Person person = new Person(1, "normanlewis", "normanlewis@email.com"); + return person; + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + public Response addPerson(Person person) { + Set> violations = validator.validate(person); + if (violations.size() > 0) { + StringBuilder sb = new StringBuilder(); + sb.append("Constraint Violation Found: ").append(System.lineSeparator()); + for (ConstraintViolation violation : violations) { + sb.append(violation.getPropertyPath()) + .append(" ") + .append(violation.getMessage()) + .append(System.lineSeparator()); + } + return Response.status(Response.Status.BAD_REQUEST).entity(sb.toString()).build(); + } + personDao.createPerson(person); + String respMessage = "Person #" + person.getId() + " created successfully."; + return Response.status(Response.Status.OK).entity(respMessage).build(); + } + + @GET + @Path("{id}") + @Produces(MediaType.APPLICATION_JSON) + @Transactional + public Person getPerson(@PathParam("id") int id) { + Person person = personDao.readPerson(id); + return person; + } +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/ApiApplication.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/ApiApplication.java similarity index 79% rename from open-liberty/src/main/java/com/baeldung/openliberty/ApiApplication.java rename to open-liberty/src/main/java/com/baeldung/openliberty/rest/ApiApplication.java index 92855b5876..176eaccaed 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/ApiApplication.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/ApiApplication.java @@ -1,4 +1,4 @@ -package com.baeldung.openliberty; +package com.baeldung.openliberty.rest; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java new file mode 100644 index 0000000000..205df8e24b --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java @@ -0,0 +1,20 @@ +package com.baeldung.openliberty.rest.consumes; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.ProcessingException; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +@RegisterRestClient(configKey = "personClient", baseUri = "http://localhost:9080/") +@RegisterProvider(UriNotFoundExceptionMapper.class) +@Path("/api/person/1") +public interface PersonClient extends AutoCloseable { + + @GET + @Produces(MediaType.APPLICATION_JSON) + public String getPerson() throws UriNotFoundException, ProcessingException; +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java new file mode 100644 index 0000000000..63496fb4e4 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java @@ -0,0 +1,32 @@ +package com.baeldung.openliberty.rest.consumes; + +import java.net.URI; + +import javax.ws.rs.ProcessingException; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.core.Response; + +import org.eclipse.microprofile.rest.client.RestClientBuilder; + +public class RestConsumer { + + public static String consumeWithJsonb(String targetUrl) { + Client client = ClientBuilder.newClient(); + Response response = client.target(targetUrl).request().get(); + String result = response.readEntity(String.class); + response.close(); + client.close(); + return result; + } + + public static String consumeWithRestBuilder(String targetUrl) throws ProcessingException, UriNotFoundException { + URI target = URI.create(targetUrl);; + PersonClient person = RestClientBuilder.newBuilder() + .baseUri(target) + .register(UriNotFoundExceptionMapper.class) + .build(PersonClient.class); + return person.getPerson(); + } + +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java new file mode 100644 index 0000000000..a803b43bb4 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java @@ -0,0 +1,14 @@ +package com.baeldung.openliberty.rest.consumes; + +public class UriNotFoundException extends Exception { + + private static final long serialVersionUID = 1L; + + public UriNotFoundException() { + super(); + } + + public UriNotFoundException(String message) { + super(message); + } +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java new file mode 100644 index 0000000000..728c4415b3 --- /dev/null +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java @@ -0,0 +1,23 @@ +package com.baeldung.openliberty.rest.consumes; + +import java.util.logging.Logger; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.Provider; +import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper; + +@Provider +public class UriNotFoundExceptionMapper implements ResponseExceptionMapper { + Logger LOG = Logger.getLogger(UriNotFoundException.class.getName()); + + @Override + public boolean handles(int status, MultivaluedMap headers) { + LOG.info("status = " + status); + return status == 404; + } + + @Override + public UriNotFoundException toThrowable(Response response) { + return new UriNotFoundException(); + } +} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/app/AppServlet.java b/open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java similarity index 70% rename from open-liberty/src/main/java/com/baeldung/openliberty/app/AppServlet.java rename to open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java index 526e13c0e9..ad61604b32 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/app/AppServlet.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java @@ -1,4 +1,4 @@ -package com.baeldung.openliberty.app; +package com.baeldung.openliberty.servlet; import java.io.IOException; @@ -10,11 +10,12 @@ import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns="/app") public class AppServlet extends HttpServlet { + private static final long serialVersionUID = 1L; - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - response.getWriter().append("Open Liberty: greet

Hello! Welcome to Open Liberty

"); + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String htmlOutput = "

Hello! Welcome to Open Liberty

"; + response.getWriter().append(htmlOutput); } protected void doPost(HttpServletRequest request, HttpServletResponse response) diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java deleted file mode 100644 index 86f2709f4d..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/user/UserResource.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.openliberty.user; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; -import javax.ws.rs.Consumes; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import com.baeldung.openliberty.user.dao.UserDao; -import com.baeldung.openliberty.user.model.User; - -@RequestScoped -@Path("user") -public class UserResource { - - @Inject - UserService userService; - - @Inject - private UserDao userDAO; - - @GET - @Produces(MediaType.APPLICATION_JSON) - public User getUser() { - return userService.getUser(); - } - - /** - * This method creates a new user from the submitted data (firstName, lastName and - * email) - */ - @POST - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - @Transactional - public Response addNewUser(@FormParam("firstName") String firstName, - @FormParam("lastName") String lastName, @FormParam("email") String email) { - System.out.println(firstName); - System.out.println(lastName); - System.out.println(email); - User newUser = new User(firstName, lastName, email); - userDAO.createUser(newUser); - return Response.status(Response.Status.NO_CONTENT).build(); - } -} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java deleted file mode 100644 index 4c79b9057f..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/user/UserService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.openliberty.user; - -import javax.enterprise.context.ApplicationScoped; - -import com.baeldung.openliberty.user.model.User; - -@ApplicationScoped -public class UserService { - - public User getUser() { - User user = new User(); - user.setFirstName("Norman"); - user.setLastName("Lewis"); - user.setEmail("normanlewis@email.com"); - return user; - } - -} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java deleted file mode 100644 index 4c006db4d7..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/user/dao/UserDao.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.baeldung.openliberty.user.dao; -import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -import com.baeldung.openliberty.user.model.User; - -import javax.enterprise.context.RequestScoped; - -@RequestScoped -public class UserDao { - - @PersistenceContext(name = "jpa-unit") - private EntityManager em; - - public void createUser(User user) { - em.persist(user); - } - - public User readUser(int userId) { - return em.find(User.class, userId); - } - - public void updateUser(User user) { - em.merge(user); - } - - public void deleteUser(User user) { - em.remove(user); - } - - public List readAllUsers() { - return em.createNamedQuery("User.findAll", User.class).getResultList(); - } - - public List findUser(String name, String location, String time) { - return em.createNamedQuery("User.findUser", User.class) - .setParameter("name", name) - .setParameter("location", location) - .setParameter("time", time).getResultList(); - } -} \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java b/open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java deleted file mode 100644 index 6c49c95bf7..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/user/model/User.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.openliberty.user.model; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name = "Event") -public class User { - - @GeneratedValue(strategy = GenerationType.AUTO) - @Id - @Column(name = "id") - private int id; - - @Column(name = "first_name") - private String firstName; - - @Column(name = "last_name") - private String lastName; - - @Column(name = "email") - private String email; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public User(String firstName, String lastName, String email) { - super(); - this.firstName = firstName; - this.lastName = lastName; - this.email = email; - } - - public User() { - super(); - } - -} diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index a83c0b462c..567d6f3e33 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -1,51 +1,34 @@ - - - appSecurity-2.0 - jaxrs-2.1 - jsonp-1.1 - cdi-2.0 - jpa-2.2 - mpMetrics-2.0 - mpHealth-2.0 - mpConfig-1.3 - restConnector-2.0 - jdbc-4.2 - + + + mpHealth-2.0 + servlet-4.0 + jaxrs-2.1 + jsonp-1.1 + + cdi-2.0 + jpa-2.2 + beanValidation-2.0 + mpConfig-1.3 + mpRestClient-1.3 + - - + + - - + - + - + + + + - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/open-liberty/src/main/resources/META-INF/persistence.xml b/open-liberty/src/main/resources/META-INF/persistence.xml index 1ad7dd2bd8..ca8ad1a5c9 100644 --- a/open-liberty/src/main/resources/META-INF/persistence.xml +++ b/open-liberty/src/main/resources/META-INF/persistence.xml @@ -1,24 +1,14 @@ - - - org.eclipse.persistence.jpa.PersistenceProvider - - jdbc/h2test - - false + + jdbc/jpadatasource + + + + \ No newline at end of file diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java new file mode 100644 index 0000000000..9f7b4cd05d --- /dev/null +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -0,0 +1,51 @@ +package com.baeldung.openliberty; + +import static org.junit.Assert.assertEquals; + +import javax.json.bind.JsonbBuilder; +import javax.ws.rs.ProcessingException; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.baeldung.openliberty.person.model.Person; +import com.baeldung.openliberty.rest.consumes.RestConsumer; +import com.baeldung.openliberty.rest.consumes.UriNotFoundException; + +public class RestClientTest { + + private static String BASE_URL; + + private final String PERSON = "api/person"; + + @BeforeClass + public static void oneTimeSetup() { + BASE_URL = "http://localhost:9080"; + } + + @Test + public void testSuite() throws ProcessingException, UriNotFoundException { + this.testJsonBClientBuilder(); + this.testRestClientBuilder(); + } + + public void testJsonBClientBuilder() { + String url = BASE_URL + "/" + PERSON + "/1"; + String result = RestConsumer.consumeWithJsonb(url); + + Person person = JsonbBuilder.create().fromJson(result, Person.class); + assert person.getId() == 1; + assertEquals(person.getUsername(), "normanlewis"); + assertEquals(person.getEmail(), "normanlewis@email.com"); + } + + public void testRestClientBuilder() throws ProcessingException, UriNotFoundException { + String result = RestConsumer.consumeWithRestBuilder(BASE_URL); + + Person person = JsonbBuilder.create().fromJson(result, Person.class); + assert person.getId() == 1; + assertEquals(person.getUsername(), "normanlewis"); + assertEquals(person.getEmail(), "normanlewis@email.com"); + } + +} diff --git a/open-liberty/src/webapp/META-INF/microprofile-config.properties b/open-liberty/src/webapp/META-INF/microprofile-config.properties index e69de29bb2..5488d9a4f6 100644 --- a/open-liberty/src/webapp/META-INF/microprofile-config.properties +++ b/open-liberty/src/webapp/META-INF/microprofile-config.properties @@ -0,0 +1 @@ +personClient/mp-rest/uri=http://localhost:9080/api/person \ No newline at end of file From 04e64eb3045b7578688e0a374e2ad5c021a3eae6 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Fri, 17 Jan 2020 16:16:23 +0200 Subject: [PATCH 04/20] BAEL-3660 - Open Liberty: code cleanup --- .../person/resource/PersonResource.java | 4 ++-- .../rest/consumes/PersonClient.java | 9 +++----- .../rest/consumes/RestConsumer.java | 8 +++---- .../rest/consumes/UriNotFoundException.java | 14 ----------- .../consumes/UriNotFoundExceptionMapper.java | 23 ------------------- .../src/main/liberty/config/server.xml | 1 - .../baeldung/openliberty/RestClientTest.java | 20 ++++++---------- .../META-INF/microprofile-config.properties | 1 - 8 files changed, 15 insertions(+), 65 deletions(-) delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java delete mode 100644 open-liberty/src/webapp/META-INF/microprofile-config.properties diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java index a729805e13..506214229c 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java @@ -4,9 +4,9 @@ import java.util.Set; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; -import javax.validation.Validator; -import javax.validation.ConstraintViolation; import javax.transaction.Transactional; +import javax.validation.ConstraintViolation; +import javax.validation.Validator; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java index 205df8e24b..de17e0e62e 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java @@ -2,19 +2,16 @@ package com.baeldung.openliberty.rest.consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; -import javax.ws.rs.ProcessingException; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; @RegisterRestClient(configKey = "personClient", baseUri = "http://localhost:9080/") -@RegisterProvider(UriNotFoundExceptionMapper.class) -@Path("/api/person/1") -public interface PersonClient extends AutoCloseable { +public interface PersonClient { @GET + @Path("/api/person") @Produces(MediaType.APPLICATION_JSON) - public String getPerson() throws UriNotFoundException, ProcessingException; + public String getPerson(); } diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java index 63496fb4e4..65199c1d9c 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java @@ -2,7 +2,6 @@ package com.baeldung.openliberty.rest.consumes; import java.net.URI; -import javax.ws.rs.ProcessingException; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Response; @@ -20,12 +19,11 @@ public class RestConsumer { return result; } - public static String consumeWithRestBuilder(String targetUrl) throws ProcessingException, UriNotFoundException { + public static String consumeWithRestBuilder(String targetUrl) { URI target = URI.create(targetUrl);; PersonClient person = RestClientBuilder.newBuilder() - .baseUri(target) - .register(UriNotFoundExceptionMapper.class) - .build(PersonClient.class); + .baseUri(target) + .build(PersonClient.class); return person.getPerson(); } diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java deleted file mode 100644 index a803b43bb4..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.openliberty.rest.consumes; - -public class UriNotFoundException extends Exception { - - private static final long serialVersionUID = 1L; - - public UriNotFoundException() { - super(); - } - - public UriNotFoundException(String message) { - super(message); - } -} diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java deleted file mode 100644 index 728c4415b3..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/UriNotFoundExceptionMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.openliberty.rest.consumes; - -import java.util.logging.Logger; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; -import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper; - -@Provider -public class UriNotFoundExceptionMapper implements ResponseExceptionMapper { - Logger LOG = Logger.getLogger(UriNotFoundException.class.getName()); - - @Override - public boolean handles(int status, MultivaluedMap headers) { - LOG.info("status = " + status); - return status == 404; - } - - @Override - public UriNotFoundException toThrowable(Response response) { - return new UriNotFoundException(); - } -} diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index 567d6f3e33..162f4f8261 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -8,7 +8,6 @@ cdi-2.0 jpa-2.2 beanValidation-2.0 - mpConfig-1.3 mpRestClient-1.3 diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java index 9f7b4cd05d..6bc0d71d8f 100644 --- a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -3,19 +3,17 @@ package com.baeldung.openliberty; import static org.junit.Assert.assertEquals; import javax.json.bind.JsonbBuilder; -import javax.ws.rs.ProcessingException; import org.junit.BeforeClass; import org.junit.Test; import com.baeldung.openliberty.person.model.Person; import com.baeldung.openliberty.rest.consumes.RestConsumer; -import com.baeldung.openliberty.rest.consumes.UriNotFoundException; public class RestClientTest { private static String BASE_URL; - + private final String PERSON = "api/person"; @BeforeClass @@ -24,24 +22,20 @@ public class RestClientTest { } @Test - public void testSuite() throws ProcessingException, UriNotFoundException { - this.testJsonBClientBuilder(); - this.testRestClientBuilder(); - } - - public void testJsonBClientBuilder() { + public void whenConsumeWithJsonb_thenGetPerson() { String url = BASE_URL + "/" + PERSON + "/1"; String result = RestConsumer.consumeWithJsonb(url); - + Person person = JsonbBuilder.create().fromJson(result, Person.class); assert person.getId() == 1; assertEquals(person.getUsername(), "normanlewis"); assertEquals(person.getEmail(), "normanlewis@email.com"); } - - public void testRestClientBuilder() throws ProcessingException, UriNotFoundException { + + @Test + public void whenConsumeWithRestBuilder_thenGetPerson() { String result = RestConsumer.consumeWithRestBuilder(BASE_URL); - + Person person = JsonbBuilder.create().fromJson(result, Person.class); assert person.getId() == 1; assertEquals(person.getUsername(), "normanlewis"); diff --git a/open-liberty/src/webapp/META-INF/microprofile-config.properties b/open-liberty/src/webapp/META-INF/microprofile-config.properties deleted file mode 100644 index 5488d9a4f6..0000000000 --- a/open-liberty/src/webapp/META-INF/microprofile-config.properties +++ /dev/null @@ -1 +0,0 @@ -personClient/mp-rest/uri=http://localhost:9080/api/person \ No newline at end of file From ccdf5f0d9f8d1d250a34b51d25360d57bac263dc Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 18 Jan 2020 17:45:12 +0200 Subject: [PATCH 05/20] Open liberty with bean validation and mpRestClient --- open-liberty/pom.xml | 2 +- .../openliberty/rest/consumes/RestConsumer.java | 2 +- open-liberty/src/main/liberty/config/server.xml | 2 +- .../baeldung/openliberty/RestClientTest.java | 17 +++++++++++------ 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/open-liberty/pom.xml b/open-liberty/pom.xml index 157029330b..1a9ebeeedb 100644 --- a/open-liberty/pom.xml +++ b/open-liberty/pom.xml @@ -111,7 +111,7 @@ 8.0.0 3.2 - 10.14.2.0 + 10.15.1.3 3.1 2.10 3.2.3 diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java index 65199c1d9c..a3b548672b 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java @@ -20,7 +20,7 @@ public class RestConsumer { } public static String consumeWithRestBuilder(String targetUrl) { - URI target = URI.create(targetUrl);; + URI target = URI.create(targetUrl); PersonClient person = RestClientBuilder.newBuilder() .baseUri(target) .build(PersonClient.class); diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index 162f4f8261..fd970feb45 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -4,7 +4,7 @@ servlet-4.0 jaxrs-2.1 jsonp-1.1 - + jsonb-1.0 cdi-2.0 jpa-2.2 beanValidation-2.0 diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java index 6bc0d71d8f..7925dcad9e 100644 --- a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -14,16 +14,22 @@ public class RestClientTest { private static String BASE_URL; - private final String PERSON = "api/person"; + private final String API_PERSON = "api/person"; @BeforeClass public static void oneTimeSetup() { - BASE_URL = "http://localhost:9080"; + BASE_URL = "http://localhost:9080/"; + } + + @Test + public void testSuite() { + //uncomment when liberty server starts + //this.whenConsumeWithJsonb_thenGetPerson(); + //this.whenConsumeWithRestBuilder_thenGetPerson(); } - @Test public void whenConsumeWithJsonb_thenGetPerson() { - String url = BASE_URL + "/" + PERSON + "/1"; + String url = BASE_URL + API_PERSON; String result = RestConsumer.consumeWithJsonb(url); Person person = JsonbBuilder.create().fromJson(result, Person.class); @@ -32,9 +38,8 @@ public class RestClientTest { assertEquals(person.getEmail(), "normanlewis@email.com"); } - @Test public void whenConsumeWithRestBuilder_thenGetPerson() { - String result = RestConsumer.consumeWithRestBuilder(BASE_URL); + String result = RestConsumer.consumeWithRestBuilder(BASE_URL); Person person = JsonbBuilder.create().fromJson(result, Person.class); assert person.getId() == 1; From 2ad996eaa38614d343f5f3855560bce10ed11d0d Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 18 Jan 2020 20:17:49 +0200 Subject: [PATCH 06/20] BAEL-3660 - Final changes --- open-liberty/pom.xml | 4 ++-- .../person/resource/PersonResource.java | 19 ------------------- .../rest/consumes/RestConsumer.java | 12 ------------ .../src/main/liberty/config/server.xml | 7 +------ .../baeldung/openliberty/RestClientTest.java | 12 +----------- 5 files changed, 4 insertions(+), 50 deletions(-) diff --git a/open-liberty/pom.xml b/open-liberty/pom.xml index 1a9ebeeedb..b01811ff77 100644 --- a/open-liberty/pom.xml +++ b/open-liberty/pom.xml @@ -111,7 +111,7 @@ 8.0.0 3.2 - 10.15.1.3 + 10.14.2.0 3.1 2.10 3.2.3 @@ -125,6 +125,6 @@ openliberty 9080 9443 - 9080 + 7070 \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java index 506214229c..049f4761b5 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java @@ -1,12 +1,8 @@ package com.baeldung.openliberty.person.resource; -import java.util.Set; - import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; -import javax.validation.ConstraintViolation; -import javax.validation.Validator; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -26,9 +22,6 @@ public class PersonResource { @Inject private PersonDao personDao; - @Inject - Validator validator; - @GET @Produces(MediaType.APPLICATION_JSON) public Person getPerson() { @@ -40,18 +33,6 @@ public class PersonResource { @Consumes(MediaType.APPLICATION_JSON) @Transactional public Response addPerson(Person person) { - Set> violations = validator.validate(person); - if (violations.size() > 0) { - StringBuilder sb = new StringBuilder(); - sb.append("Constraint Violation Found: ").append(System.lineSeparator()); - for (ConstraintViolation violation : violations) { - sb.append(violation.getPropertyPath()) - .append(" ") - .append(violation.getMessage()) - .append(System.lineSeparator()); - } - return Response.status(Response.Status.BAD_REQUEST).entity(sb.toString()).build(); - } personDao.createPerson(person); String respMessage = "Person #" + person.getId() + " created successfully."; return Response.status(Response.Status.OK).entity(respMessage).build(); diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java index a3b548672b..8073c408dd 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/RestConsumer.java @@ -1,13 +1,9 @@ package com.baeldung.openliberty.rest.consumes; -import java.net.URI; - import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Response; -import org.eclipse.microprofile.rest.client.RestClientBuilder; - public class RestConsumer { public static String consumeWithJsonb(String targetUrl) { @@ -19,12 +15,4 @@ public class RestConsumer { return result; } - public static String consumeWithRestBuilder(String targetUrl) { - URI target = URI.create(targetUrl); - PersonClient person = RestClientBuilder.newBuilder() - .baseUri(target) - .build(PersonClient.class); - return person.getPerson(); - } - } diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index fd970feb45..bc99905058 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -7,12 +7,8 @@ jsonb-1.0 cdi-2.0 jpa-2.2 - beanValidation-2.0 - mpRestClient-1.3 - - @@ -20,8 +16,7 @@ - - + diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java index 7925dcad9e..ab024d788a 100644 --- a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -23,9 +23,8 @@ public class RestClientTest { @Test public void testSuite() { - //uncomment when liberty server starts + //run the test only when liberty server is started //this.whenConsumeWithJsonb_thenGetPerson(); - //this.whenConsumeWithRestBuilder_thenGetPerson(); } public void whenConsumeWithJsonb_thenGetPerson() { @@ -38,13 +37,4 @@ public class RestClientTest { assertEquals(person.getEmail(), "normanlewis@email.com"); } - public void whenConsumeWithRestBuilder_thenGetPerson() { - String result = RestConsumer.consumeWithRestBuilder(BASE_URL); - - Person person = JsonbBuilder.create().fromJson(result, Person.class); - assert person.getId() == 1; - assertEquals(person.getUsername(), "normanlewis"); - assertEquals(person.getEmail(), "normanlewis@email.com"); - } - } From 6ab8aeb67df355bcb7b498fde5959137a0af5cd3 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 18 Jan 2020 20:30:28 +0200 Subject: [PATCH 07/20] clean up --- .../rest/consumes/PersonClient.java | 17 - .../src/main/liberty/config/server.xml | 10 +- open-liberty/src/webapp/WEB-INF/web.xml | 10 - open-liberty/src/webapp/css/main.css | 426 ------------------ open-liberty/src/webapp/favicon.ico | Bin 15086 -> 0 bytes .../webapp/fonts/BunueloCleanPro-Light.otf | Bin 113536 -> 0 bytes .../webapp/fonts/BunueloCleanPro-SemiBold.otf | Bin 116504 -> 0 bytes .../src/webapp/img/carets/caret_down_blue.svg | 10 - .../webapp/img/carets/caret_down_green.svg | 10 - .../webapp/img/carets/caret_down_orange.svg | 10 - .../src/webapp/img/carets/caret_up_blue.svg | 10 - .../src/webapp/img/carets/caret_up_green.svg | 10 - .../src/webapp/img/carets/caret_up_orange.svg | 10 - open-liberty/src/webapp/img/config.svg | 20 - open-liberty/src/webapp/img/footer_main.png | Bin 10291 -> 0 bytes open-liberty/src/webapp/img/header_ufo.png | Bin 18553 -> 0 bytes open-liberty/src/webapp/img/health.svg | 16 - open-liberty/src/webapp/img/metrics.svg | 20 - open-liberty/src/webapp/img/sysProps.svg | 20 - open-liberty/src/webapp/img/systemDown.svg | 16 - open-liberty/src/webapp/img/systemUp.svg | 16 - open-liberty/src/webapp/index.html | 130 ------ open-liberty/src/webapp/js/mpData.js | 242 ---------- 23 files changed, 5 insertions(+), 998 deletions(-) delete mode 100644 open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java delete mode 100755 open-liberty/src/webapp/WEB-INF/web.xml delete mode 100755 open-liberty/src/webapp/css/main.css delete mode 100755 open-liberty/src/webapp/favicon.ico delete mode 100755 open-liberty/src/webapp/fonts/BunueloCleanPro-Light.otf delete mode 100755 open-liberty/src/webapp/fonts/BunueloCleanPro-SemiBold.otf delete mode 100755 open-liberty/src/webapp/img/carets/caret_down_blue.svg delete mode 100755 open-liberty/src/webapp/img/carets/caret_down_green.svg delete mode 100755 open-liberty/src/webapp/img/carets/caret_down_orange.svg delete mode 100755 open-liberty/src/webapp/img/carets/caret_up_blue.svg delete mode 100755 open-liberty/src/webapp/img/carets/caret_up_green.svg delete mode 100755 open-liberty/src/webapp/img/carets/caret_up_orange.svg delete mode 100755 open-liberty/src/webapp/img/config.svg delete mode 100755 open-liberty/src/webapp/img/footer_main.png delete mode 100755 open-liberty/src/webapp/img/header_ufo.png delete mode 100755 open-liberty/src/webapp/img/health.svg delete mode 100755 open-liberty/src/webapp/img/metrics.svg delete mode 100755 open-liberty/src/webapp/img/sysProps.svg delete mode 100755 open-liberty/src/webapp/img/systemDown.svg delete mode 100755 open-liberty/src/webapp/img/systemUp.svg delete mode 100755 open-liberty/src/webapp/index.html delete mode 100755 open-liberty/src/webapp/js/mpData.js diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java b/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java deleted file mode 100644 index de17e0e62e..0000000000 --- a/open-liberty/src/main/java/com/baeldung/openliberty/rest/consumes/PersonClient.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.openliberty.rest.consumes; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; - -@RegisterRestClient(configKey = "personClient", baseUri = "http://localhost:9080/") -public interface PersonClient { - - @GET - @Path("/api/person") - @Produces(MediaType.APPLICATION_JSON) - public String getPerson(); -} diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index bc99905058..0a17fc5a49 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -2,11 +2,11 @@ mpHealth-2.0 servlet-4.0 - jaxrs-2.1 + @@ -15,14 +15,14 @@ - + + Datasource Configuration - + --> \ No newline at end of file diff --git a/open-liberty/src/webapp/WEB-INF/web.xml b/open-liberty/src/webapp/WEB-INF/web.xml deleted file mode 100755 index a3823f10b7..0000000000 --- a/open-liberty/src/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - Liberty Project - - - index.html - - \ No newline at end of file diff --git a/open-liberty/src/webapp/css/main.css b/open-liberty/src/webapp/css/main.css deleted file mode 100755 index 7f4ea6a2e4..0000000000 --- a/open-liberty/src/webapp/css/main.css +++ /dev/null @@ -1,426 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2018 IBM Corporation and others. -* All rights reserved. This program and the accompanying materials -* are made available under the terms of the Eclipse Public License v1.0 -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v10.html -* -* Contributors: -* IBM Corporation - initial API and implementation -*******************************************************************************/ -@import url("https://fonts.googleapis.com/css?family=Asap:300,400,500"); - -@font-face { - font-family: BunueloLight; - src: url("/fonts/BunueloCleanPro-Light.woff"); -} - -@font-face { - font-family: BunueloSemiBold; - src: url("/fonts/BunueloCleanPro-SemiBold.woff"); -} - -body{ - font-family:Asap; - font-size: 16px; - color:#24243b; - background-color: white; - margin: 0px; -} - -section { - padding-top: 55px; - padding-left: 8%; - padding-right: 8%; - /* font-weight: 400; */ - letter-spacing:0; - text-align:left; -} - -.line { - margin-right: 200px; - height: 1px; - background-color: #C8D3D3; -} - -.headerImage { - background-image: url(/img/header_ufo.png); - background-repeat: no-repeat; - background-position: top 20px right 15px; - height: 103px; - margin-top: -94px; -} - -#whereTo { - padding-bottom: 80px; - width: 50%; -} - -p { - line-height: 22px; - margin-top: 0px; -} -h1 { - font-family:BunueloSemiBold; - font-size: 40px; - font-weight: 400; - letter-spacing:0; - text-align:left; -} -h2 { - font-size: 24px; - font-weight: 400; -} -h4 { - margin-top: 52px; -} -a { - text-decoration: none; -} - -#appIntro { - background-image:linear-gradient(#141427 0%, #2c2e50 100%); - background-size: 100% calc(100% - 70px); - background-repeat: no-repeat; -} - -#titleSection { - color: white; - margin-bottom: 80px; -} - -#appTitle { - font-family:BunueloLight; - font-size:55px; -} - -.headerRow { - height: 100px; - position:relative; - z-index:2; - box-shadow: 0 2px 4px 0 rgba(0,0,0,0.50); -} -.headerRow > div { - display: inline-block; -} - -.collapsibleRow { - transition: border 400ms ease-out, box-shadow 200ms linear; - cursor: pointer; -} -.collapsibleRow:hover .headerTitle { - background-color: #f4f4f4; - transition: background-color 0.1s; -} -.collapsed .collapsibleRow { - box-shadow: none; - border-bottom: 4px solid; -} -.collapsed#healthSection > .headerRow { - border-bottom-color: #D6D9E4; -} -.collapsed#configSection > .headerRow { - border-bottom-color: #F8D7C1; -} -.collapsed#metricsSection > .headerRow { - border-bottom-color: #EEF3C3; -} - -.collapsed .collapsibleContent { /* collapsing animation */ - transition: all 400ms ease-out, opacity 300ms ease-in; -} -.expanded .collapsibleContent { /* expanding animation */ - transition: all 400ms ease-out, opacity 450ms ease-out; -} -.collapsed .collapsibleContent { - opacity: 0; - max-height: 0; - visibility: hidden; -} -.expanded .collapsibleContent { - opacity: 1; - max-height: 1000px; - visibility: visible; -} - -.headerIcon { - width: 160px; - height: 100%; - float: left; - background-color: #E8EAEF; -} -.headerIcon img { - display:block; - margin:auto; - margin-top: 20px; -} - -#healthSection .headerIcon { - background-color: #E8EAEF; -} -#configSection .headerIcon { - background-color: #FDE4D1; -} -#metricsSection .headerIcon { - background-color: #F5F8DA; -} - -.headerTitle { - background-color: white; - color:#5d6a8e; - letter-spacing:0; - text-align:left; - padding-left: 40px; - padding-top: 10px; - width: calc(100% - 200px); /* 160 from icon, 40 from padding */ -} -#healthSection h2 { - color: #5D6A8E; -} -#configSection h2 { - color: #E57000; -} -#metricsSection h2 { - color: #4F6700; -} - -#sysPropTitle { - padding-top: 28px; -} - -.headerTitle > h2 { - font-family: BunueloLight; - font-size:40px; - margin: 0; -} - -.caret { - position: absolute; - right: 45px; - top: 45px; -} - -.collapsed#configSection .caret { - background-image: url("../img/carets/caret_down_orange.svg") -} -.expanded#configSection .caret { - background-image: url("../img/carets/caret_up_orange.svg") -} - -.msSection { - background: white; - box-shadow: 0 2px 4px 0 rgba(63,70,89,0.31); -} - -.sectionContent { - margin-left: 160px; -} - -#systemPropertiesTable { - padding-left: 160px; - background: white; -} - -button { - border-radius:100px; - height:44px; - color:#24253a; - text-align:center; - font-family: Asap; - margin-top: 25px; - margin-bottom: 70px; - cursor: pointer; - border: none; -} - -button a { - text-decoration: none; - color:#F4914D; -} - -#guidesButton { - background-color:#abd155; - width:269px; - font-weight: 500; - font-size:16px; - transition: background-color .2s; -} -#guidesButton:hover { - background-color: #C7EE63; -} -#mpGuidesButton { - border:2px solid #f4914d8c; - border-radius:100px; - font-size:20px; - letter-spacing:0; - padding-left: 40px; - padding-right: 40px; - background-color: white; - transition: background-color .2s, color .2s; -} -#mpGuidesButton:hover { - background-color: #f4914d; - color: white; -} - -section#openLibertyAndMp { - background:#f4f4f5; - background-size: 100% calc(100% - 70px); - background-repeat: no-repeat; -} - -#healthBox { - text-align: left; - display: table-cell; - vertical-align: middle; - width: 47%; -} - -#healthBox > div { - display: table-cell; - vertical-align: middle; -} - -#healthIcon { - padding-left: 73px; - padding-top: 56px; - padding-bottom: 56px; -} -#healthStatusIcon { - width: 104px; - height: 104px; -} - -#healthText { - padding: 50px; -} - -#serviceStatus { - font-size: 50px; - font-family:BunueloLight; - margin-top: 30px; -} - -#healthNote { - text-align: left; - display: table-cell; - vertical-align: middle; - padding-left: 43px; - line-height: 26px; - width: 53%; -} - -table { - width: 100%; - font-size: 14px; - text-align: left; - border-collapse: collapse; -} - -th { - height: 63px; - padding-left: 41px; - font-size: 16px; -} -tr { - height: 45px; -} -td { - padding-left: 41px; -} -#systemPropertiesTable tr:first-child { - background: #D6D9E4; -} -#configTable tr:first-child { - background: #F8D7C1;; -} -#metricsTable tr:first-child { - background: #EEF3C3; -} - -#systemPropertiesTable tr:nth-child(2n+3) { - background: #EEEFF3; -} -#configTable tr:nth-child(2n+2) { - background: #FEF8F4; -} -#metricsTable tr:nth-child(2n+2) { - background: #FBFCEE; -} - -#systemPropertiesTable .sourceRow, -#healthTable .sourceRow { - border-top: 4px solid #D6D9E4; -} -#systemPropertiesTable .sourceRow a, -#healthTable .sourceRow a { - color: #5D6A8E; -} -#configTable .sourceRow { - border-top: 4px solid #F8D7C1; -} -#configTable .sourceRow a { - color: #E57000; -} -#metricsTable .sourceRow { - border-top: 4px solid #EEF3C3; -} -#metricsTable .sourceRow a { - color: #4F6700; -} -.sourceRow a { - font-weight: 500; -} - -#learnMore { - margin-top: 120px; - padding: 0px 200px 100px; -} - -#learnMore > h2 { - color:#5e6b8d; -} - -.bodyFooter { - padding: 5px 8%; - background-image: url(/img/footer_main.png); - background-repeat: no-repeat; - background-position: top 20px right 110px; - margin-bottom: 40px; - margin-top: 50px; - color: #3F4659; -} - -.bodyFooterLink { - font-family: Asap; - font-weight: 300; - font-size: 14px; - letter-spacing: 0; - border-bottom: solid 1px #C8D3D3; - margin-top: 30px; - margin-right: 130px; - padding-bottom: 5px; - padding-right: 50px; - text-align: right; -} - -.bodyFooterLink > a { - text-decoration: none; - padding: 10px; - color: #96bc32; -} - -#licenseLink { - color: #5E6B8D; - text-align: left; -} - -#footer_text { - margin-top: 4px; - margin-bottom: 4px; - font-size: 16px; -} - -#footer_copyright { - font-size: 11px; -} diff --git a/open-liberty/src/webapp/favicon.ico b/open-liberty/src/webapp/favicon.ico deleted file mode 100755 index c8652f35e0552d6ea391e0202f15cd5dbb63f5da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 THA598yDCa{Q - - - - - diff --git a/open-liberty/src/webapp/img/carets/caret_down_green.svg b/open-liberty/src/webapp/img/carets/caret_down_green.svg deleted file mode 100755 index 22dd4468a5..0000000000 --- a/open-liberty/src/webapp/img/carets/caret_down_green.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/open-liberty/src/webapp/img/carets/caret_down_orange.svg b/open-liberty/src/webapp/img/carets/caret_down_orange.svg deleted file mode 100755 index 33d588a50c..0000000000 --- a/open-liberty/src/webapp/img/carets/caret_down_orange.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/open-liberty/src/webapp/img/carets/caret_up_blue.svg b/open-liberty/src/webapp/img/carets/caret_up_blue.svg deleted file mode 100755 index b1346d6a1a..0000000000 --- a/open-liberty/src/webapp/img/carets/caret_up_blue.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/open-liberty/src/webapp/img/carets/caret_up_green.svg b/open-liberty/src/webapp/img/carets/caret_up_green.svg deleted file mode 100755 index 425fd6a0b3..0000000000 --- a/open-liberty/src/webapp/img/carets/caret_up_green.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/open-liberty/src/webapp/img/carets/caret_up_orange.svg b/open-liberty/src/webapp/img/carets/caret_up_orange.svg deleted file mode 100755 index fe353cb2fd..0000000000 --- a/open-liberty/src/webapp/img/carets/caret_up_orange.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/open-liberty/src/webapp/img/config.svg b/open-liberty/src/webapp/img/config.svg deleted file mode 100755 index 4eaf794a50..0000000000 --- a/open-liberty/src/webapp/img/config.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - diff --git a/open-liberty/src/webapp/img/footer_main.png b/open-liberty/src/webapp/img/footer_main.png deleted file mode 100755 index 1194702684bb3022b384a161b2c082803136fab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10291 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 - - - - - - - - - - - diff --git a/open-liberty/src/webapp/img/metrics.svg b/open-liberty/src/webapp/img/metrics.svg deleted file mode 100755 index f7287fd045..0000000000 --- a/open-liberty/src/webapp/img/metrics.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/open-liberty/src/webapp/img/sysProps.svg b/open-liberty/src/webapp/img/sysProps.svg deleted file mode 100755 index 3ba129fc7e..0000000000 --- a/open-liberty/src/webapp/img/sysProps.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - diff --git a/open-liberty/src/webapp/img/systemDown.svg b/open-liberty/src/webapp/img/systemDown.svg deleted file mode 100755 index 9f9929b52f..0000000000 --- a/open-liberty/src/webapp/img/systemDown.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/open-liberty/src/webapp/img/systemUp.svg b/open-liberty/src/webapp/img/systemUp.svg deleted file mode 100755 index b0c1e9190c..0000000000 --- a/open-liberty/src/webapp/img/systemUp.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/open-liberty/src/webapp/index.html b/open-liberty/src/webapp/index.html deleted file mode 100755 index c683a2f5b2..0000000000 --- a/open-liberty/src/webapp/index.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - -
-
-

System Properties Sample

-
-
-

Congrats on your shiny, new Open Liberty sample app!

-

This sample app uses a System Properties microservice to return the properties of the system that you're running.

-
- -
-
-
-

System Properties

-
-
- - - - -
PropertiesValue
-
-
- -
- -
-

This sample app, running on Open Liberty, uses a microservice to get the system properties from your laptop and displays them in your browser. It also displays health information about the microservice (or it will when you've added the capability) and metrics for the microservice. Scroll down to learn more.

-
- -
-
-

Where to next, captain?

-

Set course for the Open Liberty guides!

-

All of the info you need to continue your journey is here, laid out in easy to follow steps and examples. Searching our current selection makes it easy to find the guide that will help make your next project a reality.

- -
- - - - - - diff --git a/open-liberty/src/webapp/js/mpData.js b/open-liberty/src/webapp/js/mpData.js deleted file mode 100755 index e3c6e236fd..0000000000 --- a/open-liberty/src/webapp/js/mpData.js +++ /dev/null @@ -1,242 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2018, 2019 IBM Corporation and others. -* All rights reserved. This program and the accompanying materials -* are made available under the terms of the Eclipse Public License v1.0 -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v10.html -* -* Contributors: -* IBM Corporation - initial API and implementation -*******************************************************************************/ -function displayMetrics() { - getSystemMetrics(); -} - -function getSystemMetrics() { - var url = "http://localhost:9080/metrics"; - var req = new XMLHttpRequest(); - - var metricToDisplay = {}; - metricToDisplay["application_getProperties_total"] = "Request Count"; - metricToDisplay["application_io_openliberty_sample_system_SystemResource_getPropertiesTime_one_min_rate_per_second"] = "Min Request Time (ms)"; - metricToDisplay["application_io_openliberty_sample_system_SystemResource_getPropertiesTime_mean_seconds"] = "Mean Request Time (ms)"; - metricToDisplay["application_io_openliberty_sample_system_SystemResource_getPropertiesTime_max_seconds"] = "Max Request Time (ms)"; - metricToDisplay["base_cpu_processCpuLoad_percent"] = "System CPU Usage (%)"; - metricToDisplay["base_memory_usedHeap_bytes"] = "System Heap Usage (MB)"; - - var metricToMatch = "^("; - for (var metricKey in metricToDisplay) { - metricToMatch += metricKey + "|" - } - // remove the last | - metricToMatch = metricToMatch.substring(0, metricToMatch.length-1); - metricToMatch += ")\\s*(\\S*)$" - - req.onreadystatechange = function() { - if (req.readyState != 4) return; // Not there yet - if (req.status != 200) { - document.getElementById("metricsText").innerHTML = req.statusText; - return; - } - - var resp = req.responseText; - var regexpToMatch = new RegExp(metricToMatch, "gm"); - var matchMetrics = resp.match(regexpToMatch); - - var keyValPairs = {}; - for (var metricKey in metricToDisplay) { - matchMetrics.forEach(function(line) { - var keyToMatch = metricKey + " (.*)"; - var keyVal = line.match(new RegExp(keyToMatch)); - if (keyVal) { - var val = keyVal[1]; - if (metricKey.indexOf("application:io_openliberty_sample_system_system_resource_get_properties_time") === 0) { - val = val * 1000; - } else if (metricKey.indexOf("base:memory_used_heap_bytes") === 0) { - val = val / 1000000; - } - keyValPairs[metricToDisplay[metricKey]] = val; - } - }) - } - - var table = document.getElementById("metricsTableBody"); - for (key in keyValPairs) { - var row = document.createElement("tr"); - var keyData = document.createElement("td"); - keyData.innerText = key; - var valueData = document.createElement("td"); - valueData.innerText = keyValPairs[key]; - row.appendChild(keyData); - row.appendChild(valueData); - table.appendChild(row); - } - - addSourceRow(table, url); - }; - - req.open("GET", url, true); - req.send(); -} - -function displaySystemProperties() { - getSystemPropertiesRequest(); -} - -function getSystemPropertiesRequest() { - var propToDisplay = ["java.vendor", "java.version", "user.name", "os.name", "wlp.install.dir", "wlp.server.name" ]; - var url = "http://localhost:9080/system/properties"; - var req = new XMLHttpRequest(); - var table = document.getElementById("systemPropertiesTable"); - // Create the callback: - req.onreadystatechange = function () { - if (req.readyState != 4) return; // Not there yet - displayMetrics(); - if (req.status != 200) { - table.innerHTML = ""; - var row = document.createElement("tr"); - var th = document.createElement("th"); - th.innerText = req.statusText; - row.appendChild(th); - table.appendChild(row); - - addSourceRow(table, url); - return; - } - // Request successful, read the response - var resp = JSON.parse(req.responseText); - for (var i = 0; i < propToDisplay.length; i++) { - var key = propToDisplay[i]; - if (resp.hasOwnProperty(key)) { - var row = document.createElement("tr"); - var keyData = document.createElement("td"); - keyData.innerText = key; - var valueData = document.createElement("td"); - valueData.innerText = resp[key]; - row.appendChild(keyData); - row.appendChild(valueData); - table.appendChild(row); - } - } - - addSourceRow(table, url); - }; - req.open("GET", url, true); - req.send(); -} - -function displayHealth() { - getHealth(); -} - -function getHealth() { - var url = "http://localhost:9080/health"; - var req = new XMLHttpRequest(); - - var healthBox = document.getElementById("healthBox"); - var serviceName = document.getElementById("serviceName"); - var healthStatus = document.getElementById("serviceStatus"); - var healthIcon = document.getElementById("healthStatusIconImage"); - - req.onreadystatechange = function () { - if (req.readyState != 4) return; // Not there yet - - // Request successful, read the response - if (req.responseText) { - var resp = JSON.parse(req.responseText); - var service = resp.checks[0]; //TODO: use for loop for multiple services - - resp.checks.forEach(function (service) { - serviceName.innerText = service.name; - healthStatus.innerText = service.status; - - if (service.status === "UP") { - healthBox.style.backgroundColor = "#f0f7e1"; - healthIcon.setAttribute("src", "img/systemUp.svg"); - } else { - healthBox.style.backgroundColor = "#fef7f2"; - healthIcon.setAttribute("src", "img/systemDown.svg"); - } - }); - } - var table = document.getElementById("healthTable"); - - addSourceRow(table, url); - }; - req.open("GET", url, true); - req.send(); -} - -function displayConfigProperties() { - getConfigPropertiesRequest(); -} - -function getConfigPropertiesRequest() { - var url = "http://localhost:9080/config"; - var req = new XMLHttpRequest(); - - var configToDisplay = {}; - configToDisplay["io_openliberty_sample_system_inMaintenance"] = "System In Maintenance"; - configToDisplay["io_openliberty_sample_testConfigOverwrite"] = "Test Config Overwrite"; - configToDisplay["io_openliberty_sample_port_number"] = "Port Number"; - // Create the callback: - req.onreadystatechange = function () { - if (req.readyState != 4) return; // Not there yet - if (req.status != 200) { - return; - } - - // Request successful, read the response - var resp = JSON.parse(req.responseText); - var configProps = resp["ConfigProperties"]; - var table = document.getElementById("configTableBody"); - for (key in configProps) { - var row = document.createElement("tr"); - var keyData = document.createElement("td"); - keyData.innerText = configToDisplay[key]; - var valueData = document.createElement("td"); - valueData.innerText = configProps[key]; - row.appendChild(keyData); - row.appendChild(valueData); - table.appendChild(row); - } - - addSourceRow(table, url); - } - req.open("GET", url, true); - req.send(); -} - -function toggle(e) { - var callerElement; - if (!e) { - if (window.event) { - e = window.event; - callerElement = e.currentTarget; - } else { - callerElement = window.toggle.caller.arguments[0].currentTarget; // for firefox - } - } - - var classes = callerElement.parentElement.classList; - var collapsed = classes.contains("collapsed"); - var caretImg = callerElement.getElementsByClassName("caret")[0]; - var caretImgSrc = caretImg.getAttribute("src"); - if (collapsed) { // expand the section - classes.replace("collapsed", "expanded"); - caretImg.setAttribute("src", caretImgSrc.replace("down", "up")); - } else { // collapse the section - classes.replace("expanded", "collapsed"); - caretImg.setAttribute("src", caretImgSrc.replace("up", "down")); - } -} - -function addSourceRow(table, url) { - var sourceRow = document.createElement("tr"); - sourceRow.classList.add("sourceRow"); - var sourceText = document.createElement("td"); - sourceText.setAttribute("colspan", "100%"); - sourceText.innerHTML = "API Source\: "+url+""; - sourceRow.appendChild(sourceText); - table.appendChild(sourceRow); -} From c1b2a5615a07f344fbb8ad43dfb470b2b654ef47 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 18 Jan 2020 20:32:25 +0200 Subject: [PATCH 08/20] server.xml fix --- open-liberty/src/main/liberty/config/server.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/open-liberty/src/main/liberty/config/server.xml b/open-liberty/src/main/liberty/config/server.xml index 0a17fc5a49..bc99905058 100644 --- a/open-liberty/src/main/liberty/config/server.xml +++ b/open-liberty/src/main/liberty/config/server.xml @@ -2,11 +2,11 @@ mpHealth-2.0 servlet-4.0 - + jpa-2.2 @@ -15,14 +15,14 @@ - - --> + \ No newline at end of file From d59e19051f594db5bcda68dd1be84b39d63d87b5 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 18 Jan 2020 20:40:00 +0200 Subject: [PATCH 09/20] code indent in pom.xml with spaces --- open-liberty/pom.xml | 238 +++++++++--------- .../openliberty/person/model/Person.java | 3 - 2 files changed, 119 insertions(+), 122 deletions(-) diff --git a/open-liberty/pom.xml b/open-liberty/pom.xml index b01811ff77..d6588ce49a 100644 --- a/open-liberty/pom.xml +++ b/open-liberty/pom.xml @@ -1,130 +1,130 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.baeldung - open-liberty - 1.0-SNAPSHOT - war + com.baeldung + open-liberty + 1.0-SNAPSHOT + war - - - jakarta.platform - jakarta.jakartaee-web-api - ${version.jakarta.jakartaee-web-api} - provided - - - org.eclipse.microprofile - microprofile - ${version.microprofile} - pom - provided - - - org.apache.derby - derby - ${version.derby} - + + + jakarta.platform + jakarta.jakartaee-web-api + ${version.jakarta.jakartaee-web-api} + provided + + + org.eclipse.microprofile + microprofile + ${version.microprofile} + pom + provided + + + org.apache.derby + derby + ${version.derby} + - - - junit - junit - ${version.junit} - test - - - org.eclipse - yasson - ${version.yasson} - test - - - org.apache.cxf - cxf-rt-rs-client - ${version.cxf-rt-rs-client} - test - - - org.glassfish - javax.json - ${version.javax.json} - test - - - org.apache.cxf - cxf-rt-rs-mp-client - ${version.cxf-rt-rs-mp-client} - test - - + + + junit + junit + ${version.junit} + test + + + org.eclipse + yasson + ${version.yasson} + test + + + org.apache.cxf + cxf-rt-rs-client + ${version.cxf-rt-rs-client} + test + + + org.glassfish + javax.json + ${version.javax.json} + test + + + org.apache.cxf + cxf-rt-rs-mp-client + ${version.cxf-rt-rs-mp-client} + test + + - - ${project.artifactId} - - - - io.openliberty.tools - liberty-maven-plugin - ${version.liberty-maven-plugin} - - - org.apache.maven.plugins - maven-dependency-plugin - ${version.maven-dependency-plugin} - - - copy-derby-dependency - package - - copy-dependencies - - - derby - ${project.build.directory}/liberty/wlp/usr/shared/resources/ - - ${testServerHttpPort} - - - - - - - org.apache.maven.plugins - maven-war-plugin - ${version.maven-war-plugin} - + + ${project.artifactId} + + + + io.openliberty.tools + liberty-maven-plugin + ${version.liberty-maven-plugin} + + + org.apache.maven.plugins + maven-dependency-plugin + ${version.maven-dependency-plugin} + + + copy-derby-dependency + package + + copy-dependencies + + + derby + ${project.build.directory}/liberty/wlp/usr/shared/resources/ + + ${testServerHttpPort} + + + + + + + org.apache.maven.plugins + maven-war-plugin + ${version.maven-war-plugin} + - - + + - - 1.8 - 1.8 - UTF-8 - UTF-8 - false + + 1.8 + 1.8 + UTF-8 + UTF-8 + false - - 8.0.0 - 3.2 - 10.14.2.0 - 3.1 - 2.10 - 3.2.3 - 4.12 - 1.0.5 - 3.2.6 - 1.0.4 - 3.3.1 + + 8.0.0 + 3.2 + 10.14.2.0 + 3.1 + 2.10 + 3.2.3 + 4.12 + 1.0.5 + 3.2.6 + 1.0.4 + 3.3.1 - - openliberty - 9080 - 9443 - 7070 - + + openliberty + 9080 + 9443 + 7070 + \ No newline at end of file diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java index e506fd005b..79e8c16911 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/model/Person.java @@ -14,10 +14,7 @@ public class Person { @Id private int id; - @NotBlank private String username; - - @Email private String email; public int getId() { From 987c55e9349fbe908811817b08fe01bb7d5a7891 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 18 Jan 2020 20:43:20 +0200 Subject: [PATCH 10/20] added open-liberty module to the parent pom.xml --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index cb2fe5a929..dc87307a85 100644 --- a/pom.xml +++ b/pom.xml @@ -588,6 +588,7 @@ mybatis ninja netflix + open-liberty optaplanner orika @@ -1220,6 +1221,7 @@ mybatis ninja netflix + open-liberty optaplanner orika From 15f3c94023c59ca118ddce3d2ae05b224bf21b55 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Mon, 20 Jan 2020 18:03:39 +0200 Subject: [PATCH 11/20] Review corrections --- .../person/resource/PersonResource.java | 15 ++++++++++----- .../com/baeldung/openliberty/RestClientTest.java | 6 +++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java index 049f4761b5..89f39adccc 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java @@ -1,5 +1,8 @@ package com.baeldung.openliberty.person.resource; +import java.util.ArrayList; +import java.util.List; + import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.transaction.Transactional; @@ -16,7 +19,7 @@ import com.baeldung.openliberty.person.dao.PersonDao; import com.baeldung.openliberty.person.model.Person; @RequestScoped -@Path("person") +@Path("persons") public class PersonResource { @Inject @@ -24,9 +27,11 @@ public class PersonResource { @GET @Produces(MediaType.APPLICATION_JSON) - public Person getPerson() { - Person person = new Person(1, "normanlewis", "normanlewis@email.com"); - return person; + public List getAllPerson() { + Person person = new Person(1, "normanlewis", "normanlewis@email.com"); + List persons = new ArrayList<>(); + persons.add(person); + return persons; } @POST @@ -35,7 +40,7 @@ public class PersonResource { public Response addPerson(Person person) { personDao.createPerson(person); String respMessage = "Person #" + person.getId() + " created successfully."; - return Response.status(Response.Status.OK).entity(respMessage).build(); + return Response.status(Response.Status.CREATED).entity(respMessage).build(); } @GET diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java index ab024d788a..93231635ed 100644 --- a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -14,7 +14,7 @@ public class RestClientTest { private static String BASE_URL; - private final String API_PERSON = "api/person"; + private final String API_PERSON = "api/persons"; @BeforeClass public static void oneTimeSetup() { @@ -24,11 +24,11 @@ public class RestClientTest { @Test public void testSuite() { //run the test only when liberty server is started - //this.whenConsumeWithJsonb_thenGetPerson(); + this.whenConsumeWithJsonb_thenGetPerson(); } public void whenConsumeWithJsonb_thenGetPerson() { - String url = BASE_URL + API_PERSON; + String url = BASE_URL + API_PERSON + "/1"; String result = RestConsumer.consumeWithJsonb(url); Person person = JsonbBuilder.create().fromJson(result, Person.class); From 6bf3d238b63441e822b0e8944c47225d4404bd62 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Wed, 22 Jan 2020 15:10:33 +0200 Subject: [PATCH 12/20] review correction --- .../test/java/com/baeldung/openliberty/RestClientTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java index 93231635ed..a1169e6d63 100644 --- a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -24,7 +24,7 @@ public class RestClientTest { @Test public void testSuite() { //run the test only when liberty server is started - this.whenConsumeWithJsonb_thenGetPerson(); + //this.whenConsumeWithJsonb_thenGetPerson(); } public void whenConsumeWithJsonb_thenGetPerson() { @@ -32,7 +32,7 @@ public class RestClientTest { String result = RestConsumer.consumeWithJsonb(url); Person person = JsonbBuilder.create().fromJson(result, Person.class); - assert person.getId() == 1; + assertEquals(person.getId(), 1); assertEquals(person.getUsername(), "normanlewis"); assertEquals(person.getEmail(), "normanlewis@email.com"); } From cb2e6a060d47bab4d864fa4d8fc8484b6fb7ae8e Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Wed, 22 Jan 2020 15:17:45 +0200 Subject: [PATCH 13/20] revert --- .../core-java-concurrency-advanced-3/pom.xml | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/core-java-modules/core-java-concurrency-advanced-3/pom.xml b/core-java-modules/core-java-concurrency-advanced-3/pom.xml index df9834181f..8f275f4043 100644 --- a/core-java-modules/core-java-concurrency-advanced-3/pom.xml +++ b/core-java-modules/core-java-concurrency-advanced-3/pom.xml @@ -23,6 +23,37 @@ ${assertj.version} test + + + com.jcabi + jcabi-aspects + ${jcabi-aspects.version} + + + + org.aspectj + aspectjrt + ${aspectjrt.version} + runtime + + + + com.google.guava + guava + ${guava.version} + + + + org.cactoos + cactoos + ${cactoos.version} + + + + com.ea.async + ea-async + ${ea-async.version} + @@ -36,6 +67,30 @@ ${maven.compiler.target} + + com.jcabi + jcabi-maven-plugin + ${jcabi-maven-plugin.version} + + + + ajc + + + + + + org.aspectj + aspectjtools + ${aspectjtools.version} + + + org.aspectj + aspectjweaver + ${aspectjweaver.version} + + + @@ -49,6 +104,14 @@ 3.14.0 1.8 1.8 + 0.22.6 + 1.9.5 + 28.2-jre + 0.43 + 1.2.3 + 0.14.1 + 1.9.1 + 1.9.1 From fd233a6f00c5fc95d8daad6d1c350725c583db10 Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Fri, 24 Jan 2020 09:30:17 +0200 Subject: [PATCH 14/20] review fix - changed the order of arguments --- .../test/java/com/baeldung/openliberty/RestClientTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java index a1169e6d63..4978483ca0 100644 --- a/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java +++ b/open-liberty/src/test/java/com/baeldung/openliberty/RestClientTest.java @@ -32,9 +32,9 @@ public class RestClientTest { String result = RestConsumer.consumeWithJsonb(url); Person person = JsonbBuilder.create().fromJson(result, Person.class); - assertEquals(person.getId(), 1); - assertEquals(person.getUsername(), "normanlewis"); - assertEquals(person.getEmail(), "normanlewis@email.com"); + assertEquals(1, person.getId()); + assertEquals("normanlewis", person.getUsername()); + assertEquals("normanlewis@email.com", person.getEmail()); } } From 4477bcd0aca7d2523601754757577521e9d6338a Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Tue, 28 Jan 2020 15:43:28 +0200 Subject: [PATCH 15/20] review fixes --- .../openliberty/person/resource/PersonResource.java | 8 +++----- .../java/com/baeldung/openliberty/servlet/AppServlet.java | 2 ++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java index 89f39adccc..0fb86860b8 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/person/resource/PersonResource.java @@ -1,6 +1,7 @@ package com.baeldung.openliberty.person.resource; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.enterprise.context.RequestScoped; @@ -27,11 +28,8 @@ public class PersonResource { @GET @Produces(MediaType.APPLICATION_JSON) - public List getAllPerson() { - Person person = new Person(1, "normanlewis", "normanlewis@email.com"); - List persons = new ArrayList<>(); - persons.add(person); - return persons; + public List getAllPersons() { + return Arrays.asList(new Person(1, "normanlewis", "normanlewis@email.com")); } @POST diff --git a/open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java b/open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java index ad61604b32..d8c8d159c4 100644 --- a/open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java +++ b/open-liberty/src/main/java/com/baeldung/openliberty/servlet/AppServlet.java @@ -13,11 +13,13 @@ public class AppServlet extends HttpServlet { private static final long serialVersionUID = 1L; + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String htmlOutput = "

Hello! Welcome to Open Liberty

"; response.getWriter().append(htmlOutput); } + @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); From 06161e1bae98deb4e9f7b2b50ab6b2a303e129ad Mon Sep 17 00:00:00 2001 From: mikr Date: Sun, 2 Feb 2020 20:44:54 +0100 Subject: [PATCH 16/20] BAEL-20869 Move remaining spring boot modules --- pom.xml | 45 -- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes spring-boot-modules/pom.xml | 17 +- .../spring-boot-angular}/README.md | 0 .../spring-boot-angular}/pom.xml | 2 +- .../com/baeldung/application/Application.java | 56 +- .../controllers/UserController.java | 62 +- .../baeldung/application/entities/User.java | 86 +-- .../repositories/UserRepository.java | 18 +- .../ecommerce/EcommerceApplication.java | 0 .../ecommerce/controller/OrderController.java | 0 .../controller/ProductController.java | 0 .../ecommerce/dto/OrderProductDto.java | 0 .../exception/ApiExceptionHandler.java | 0 .../exception/ResourceNotFoundException.java | 0 .../com/baeldung/ecommerce/model/Order.java | 0 .../ecommerce/model/OrderProduct.java | 0 .../ecommerce/model/OrderProductPK.java | 0 .../baeldung/ecommerce/model/OrderStatus.java | 0 .../com/baeldung/ecommerce/model/Product.java | 0 .../repository/OrderProductRepository.java | 0 .../ecommerce/repository/OrderRepository.java | 0 .../repository/ProductRepository.java | 0 .../service/OrderProductService.java | 0 .../service/OrderProductServiceImpl.java | 0 .../ecommerce/service/OrderService.java | 0 .../ecommerce/service/OrderServiceImpl.java | 0 .../ecommerce/service/ProductService.java | 0 .../ecommerce/service/ProductServiceImpl.java | 0 .../src/main/js/application/.angular-cli.json | 0 .../src/main/js/application/.editorconfig | 0 .../src/main/js/application/.gitignore | 0 .../src/main/js/application/README.md | 0 .../main/js/application/e2e/app.e2e-spec.ts | 0 .../src/main/js/application/e2e/app.po.ts | 0 .../main/js/application/e2e/tsconfig.e2e.json | 0 .../src/main/js/application/karma.conf.js | 0 .../src/main/js/application/package-lock.json | 0 .../src/main/js/application/package.json | 0 .../main/js/application/protractor.conf.js | 0 .../application/src/app/app-routing.module.ts | 0 .../js/application/src/app/app.component.css | 0 .../js/application/src/app/app.component.html | 0 .../application/src/app/app.component.spec.ts | 0 .../js/application/src/app/app.component.ts | 0 .../main/js/application/src/app/app.module.ts | 0 .../main/js/application/src/app/model/user.ts | 0 .../src/app/service/user.service.spec.ts | 0 .../src/app/service/user.service.ts | 0 .../src/app/user-form/user-form.component.css | 0 .../app/user-form/user-form.component.html | 0 .../app/user-form/user-form.component.spec.ts | 0 .../src/app/user-form/user-form.component.ts | 0 .../src/app/user-list/user-list.component.css | 0 .../app/user-list/user-list.component.html | 0 .../app/user-list/user-list.component.spec.ts | 0 .../src/app/user-list/user-list.component.ts | 0 .../main/js/application/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 0 .../src/environments/environment.ts | 0 .../src/main/js/application/src/favicon.ico | Bin .../src/main/js/application/src/index.html | 4 +- .../src/main/js/application/src/main.ts | 0 .../src/main/js/application/src/polyfills.ts | 0 .../src/main/js/application/src/styles.css | 0 .../main/js/application/src/tsconfig.app.json | 0 .../js/application/src/tsconfig.spec.json | 0 .../src/main/js/application/src/typings.d.ts | 0 .../src/main/js/application/tsconfig.json | 0 .../src/main/js/application/tslint.json | 0 .../src/main/js/ecommerce/.editorconfig | 0 .../src/main/js/ecommerce/README.md | 0 .../src/main/js/ecommerce/angular.json | 0 .../main/js/ecommerce/e2e/protractor.conf.js | 0 .../main/js/ecommerce/e2e/src/app.e2e-spec.ts | 0 .../src/main/js/ecommerce/e2e/src/app.po.ts | 0 .../main/js/ecommerce/e2e/tsconfig.e2e.json | 0 .../src/main/js/ecommerce/package-lock.json | 0 .../src/main/js/ecommerce/package.json | 0 .../src/main/js/ecommerce/proxy-conf.json | 0 .../js/ecommerce/src/app/app.component.css | 0 .../js/ecommerce/src/app/app.component.html | 0 .../ecommerce/src/app/app.component.spec.ts | 0 .../js/ecommerce/src/app/app.component.ts | 0 .../main/js/ecommerce/src/app/app.module.ts | 0 .../src/app/ecommerce/ecommerce.component.css | 0 .../app/ecommerce/ecommerce.component.html | 0 .../app/ecommerce/ecommerce.component.spec.ts | 0 .../src/app/ecommerce/ecommerce.component.ts | 0 .../ecommerce/models/product-order.model.ts | 0 .../ecommerce/models/product-orders.model.ts | 0 .../src/app/ecommerce/models/product.model.ts | 0 .../app/ecommerce/orders/orders.component.css | 0 .../ecommerce/orders/orders.component.html | 0 .../ecommerce/orders/orders.component.spec.ts | 0 .../app/ecommerce/orders/orders.component.ts | 0 .../ecommerce/products/products.component.css | 0 .../products/products.component.html | 0 .../products/products.component.spec.ts | 0 .../ecommerce/products/products.component.ts | 0 .../ecommerce/services/EcommerceService.ts | 0 .../shopping-cart/shopping-cart.component.css | 0 .../shopping-cart.component.html | 0 .../shopping-cart.component.spec.ts | 0 .../shopping-cart/shopping-cart.component.ts | 0 .../src/main/js/ecommerce/src/assets/.gitkeep | 0 .../src/main/js/ecommerce/src/browserslist | 0 .../src/environments/environment.prod.ts | 0 .../ecommerce/src/environments/environment.ts | 0 .../src/main/js/ecommerce/src/favicon.ico | Bin .../src/main/js/ecommerce/src/index.html | 2 +- .../src/main/js/ecommerce/src/karma.conf.js | 0 .../src/main/js/ecommerce/src/main.ts | 0 .../src/main/js/ecommerce/src/polyfills.ts | 0 .../src/main/js/ecommerce/src/styles.css | 0 .../src/main/js/ecommerce/src/test.ts | 0 .../main/js/ecommerce/src/tsconfig.app.json | 0 .../main/js/ecommerce/src/tsconfig.spec.json | 0 .../src/main/js/ecommerce/src/tslint.json | 0 .../src/main/js/ecommerce/tsconfig.json | 0 .../src/main/js/ecommerce/tslint.json | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 .../EcommerceApplicationIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../spring-boot-bootstrap}/.gitignore | 0 .../spring-boot-bootstrap}/README.md | 0 .../cloudfoundry/manifest.yml | 0 .../openshift/configmap.yml | 0 .../spring-boot-bootstrap}/pom.xml | 2 +- .../src/main/appengine/app.yaml | 0 .../src/main/fabric8/deployment.yml | 0 .../main/java/com/baeldung/Application.java | 0 .../cloud/config/CloudDataSourceConfig.java | 0 .../com/baeldung/config/SecurityConfig.java | 0 .../com/baeldung/persistence/model/Book.java | 0 .../persistence/repo/BookRepository.java | 0 .../springbootconfiguration/Application.java | 0 .../PersonService.java | 0 .../PersonServiceImpl.java | 0 .../java/com/baeldung/web/BookController.java | 0 .../baeldung/web/RestExceptionHandler.java | 0 .../com/baeldung/web/SimpleController.java | 0 .../exception/BookIdMismatchException.java | 0 .../web/exception/BookNotFoundException.java | 0 .../application-beanstalk.properties | 0 .../main/resources/application-gcp.properties | 0 .../resources/application-local.properties | 0 .../resources/application-mysql.properties | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback-gcp.xml | 0 .../src/main/resources/logback.xml | 0 .../spring-cloud-bootstrap.properties | 0 .../src/main/resources/templates/error.html | 0 .../src/main/resources/templates/home.html | 0 .../baeldung/SpringBootBootstrapLiveTest.java | 0 .../java/com/baeldung/SpringContextTest.java | 0 .../spring-boot-cli}/README.md | 0 .../spring-boot-cli}/bash/groovy.sh | 0 .../spring-boot-cli}/bash/setup.sh | 0 .../groovy/data/DataConfig.groovy | 0 .../groovy/security/Security.groovy | 0 .../spring-boot-cli}/groovy/test/Test.groovy | 0 .../groovy/yml/Application.groovy | 0 .../groovy/yml/config/application.yml | 0 .../spring-boot-client}/.gitignore | 0 .../spring-boot-client}/README.MD | 0 .../spring-boot-client}/pom.xml | 2 +- .../java/org/baeldung/boot/Application.java | 0 .../org/baeldung/boot/client/Details.java | 0 .../boot/client/DetailsServiceClient.java | 0 .../baeldung/websocket/client/Message.java | 0 .../client/MyStompSessionHandler.java | 0 .../websocket/client/StompClient.java | 0 .../src/main/resources/logback.xml | 0 .../MyStompSessionHandlerIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../DetailsServiceClientIntegrationTest.java | 0 .../spring-boot-config-jpa-error}/README.md | 0 .../data-jpa-application/README.md | 0 .../data-jpa-application/pom.xml | 0 .../baeldung/data/jpa/ApplicationFound.java | 0 .../jpa/application/ApplicationNotFound.java | 0 .../baeldung/data/jpa/DataJpaUnitTest.java | 0 .../data-jpa-library/README.md | 0 .../data-jpa-library/pom.xml | 0 .../data/jpa/libarary/model/Example.java | 0 .../baeldung/data/jpa/TestApplication.java | 0 .../data/jpa/libarary/DataJpaUnitTest.java | 0 .../spring-boot-config-jpa-error}/pom.xml | 2 +- .../spring-boot-deployment}/README.md | 0 .../spring-boot-deployment}/pom.xml | 2 +- .../compare/ComparisonApplication.java | 0 .../baeldung/compare/StartupEventHandler.java | 0 .../GracefulShutdownApplication.java | 0 .../beans/LongRunningProcessBean.java | 0 .../config/SpringConfiguration.java | 0 .../SpringBootConfigurationApplication.java | 0 .../controller/GreetingsController.java | 0 .../SpringBootConsoleApplication.java | 0 .../SpringBootTomcatApplication.java | 0 .../springbootsimple/TomcatController.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 .../SpringContextTest.java | 0 ...gBootTomcatApplicationIntegrationTest.java | 0 .../spring-boot-environment}/README.md | 0 .../spring-boot-environment}/pom.xml | 2 +- .../PriceCalculationApplication.java | 0 ...ceCalculationEnvironmentPostProcessor.java | 0 .../PriceCalculationAutoConfig.java | 0 .../calculator/GrossPriceCalculator.java | 0 .../calculator/NetPriceCalculator.java | 0 .../calculator/PriceCalculator.java | 0 .../service/PriceCalculationService.java | 0 .../baeldung/properties/ConfProperties.java | 0 .../ExternalPropertyConfigurer.java | 0 .../ExternalPropertyFileLoader.java | 0 .../main/resources/META-INF/spring.factories | 0 .../src/main/resources/application.properties | 0 .../main/resources/external/conf.properties | 0 .../src/main/resources/logback.xml | 0 ...ationEnvironmentPostProcessorLiveTest.java | 0 ...rnalPropertyFileLoaderIntegrationTest.java | 0 .../spring-boot-flowable}/README.md | 0 .../spring-boot-flowable}/pom.xml | 2 +- .../main/java/com/baeldung/Application.java | 0 .../controller/ArticleWorkflowController.java | 0 .../java/com/baeldung/domain/Approval.java | 0 .../java/com/baeldung/domain/Article.java | 0 .../service/ArticleWorkflowService.java | 0 .../service/PublishArticleService.java | 0 .../com/baeldung/service/SendMailService.java | 0 .../src/main/resources/application.properties | 0 .../processes/article-workflow.bpmn20.xml | 0 .../ArticleWorkflowIntegrationTest.java | 0 .../spring-boot-jasypt}/.gitignore | 0 .../spring-boot-jasypt}/README.md | 0 .../spring-boot-jasypt}/pom.xml | 2 +- .../main/java/com/baeldung/jasypt/Main.java | 0 .../simple/AppConfigForJasyptSimple.java | 0 .../PropertyServiceForJasyptSimple.java | 0 .../starter/AppConfigForJasyptStarter.java | 0 .../PropertyServiceForJasyptStarter.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/encrypted.properties | 0 .../src/main/resources/encryptedv2.properties | 0 .../src/main/resources/logback.xml | 0 .../jasypt/CustomJasyptIntegrationTest.java | 0 .../jasypt/JasyptSimpleIntegrationTest.java | 0 .../JasyptWithStarterIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../spring-boot-libraries}/.gitignore | 0 .../spring-boot-libraries}/README.md | 0 .../spring-boot-libraries}/mvnw | 0 .../spring-boot-libraries}/mvnw.cmd | 0 .../spring-boot-libraries}/pom.xml | 2 +- .../java/com/baeldung/boot/Application.java | 0 .../problem/SpringProblemApplication.java | 0 .../boot/problem/advice/ExceptionHandler.java | 0 .../advice/SecurityExceptionHandler.java | 0 .../ProblemDemoConfiguration.java | 0 .../configuration/SecurityConfiguration.java | 0 .../controller/ProblemDemoController.java | 0 .../com/baeldung/boot/problem/dto/Task.java | 0 .../problem/problems/TaskNotFoundProblem.java | 0 .../shedlock/SchedulerConfiguration.java | 0 .../scheduling/shedlock/TaskScheduler.java | 0 .../resources/application-problem.properties | 0 .../ProblemDemoControllerIntegrationTest.java | 0 .../spring-boot-mvc-2}/.gitignore | 0 .../spring-boot-mvc-2}/README.md | 0 .../spring-boot-mvc-2}/pom.xml | 2 +- .../SpringBootMvcFnApplication.java | 0 .../springbootmvc/ctrl/ProductController.java | 0 .../baeldung/springbootmvc/model/Product.java | 0 .../springbootmvc/svc/ProductService.java | 0 .../SpringBootSwaggerApplication.java | 0 .../swagger2boot/config/Swagger2Config.java | 0 .../controller/FooController.java | 0 .../com/baeldung/swagger2boot/model/Foo.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 .../main/resources/swagger-description.yml | 0 .../spring-boot-mvc}/.gitignore | 0 .../spring-boot-mvc}/README.md | 0 .../spring-boot-mvc}/pom.xml | 2 +- .../java/com/baeldung/accessparamsjs/App.java | 0 .../baeldung/accessparamsjs/Controller.java | 0 .../java/com/baeldung/annotations/Bike.java | 0 .../java/com/baeldung/annotations/Biker.java | 0 .../java/com/baeldung/annotations/Car.java | 0 .../com/baeldung/annotations/CarMechanic.java | 0 .../com/baeldung/annotations/CarUtility.java | 0 .../baeldung/annotations/CustomException.java | 0 .../java/com/baeldung/annotations/Driver.java | 0 .../java/com/baeldung/annotations/Engine.java | 0 .../annotations/PerformanceAspect.java | 0 .../com/baeldung/annotations/Vehicle.java | 0 .../annotations/VehicleController.java | 0 .../VehicleFactoryApplication.java | 0 .../annotations/VehicleFactoryConfig.java | 0 .../annotations/VehicleRepository.java | 0 .../annotations/VehicleRestController.java | 0 .../baeldung/annotations/VehicleService.java | 0 .../nosuchbeandefinitionexception/BeanA.java | 0 .../nosuchbeandefinitionexception/BeanB.java | 10 +- .../NoSuchBeanDefinitionDemoApp.java | 0 .../CustomResponseController.java | 0 .../CustomResponseWithBuilderController.java | 0 .../com/baeldung/rss/RssFeedApplication.java | 0 .../com/baeldung/rss/RssFeedController.java | 0 .../java/com/baeldung/rss/RssFeedView.java | 0 .../scheduling/ScheduleJobsByProfile.java | 0 .../com/baeldung/scheduling/ScheduledJob.java | 0 .../scheduling/ScheduledJobsWithBoolean.java | 0 .../ScheduledJobsWithConditional.java | 0 .../ScheduledJobsWithExpression.java | 0 .../scheduling/SchedulingApplication.java | 0 .../MySQLAutoconfiguration.java | 0 .../springbootmvc/LoggingController.java | 0 .../springbootmvc/LoginController.java | 0 .../SpringBootMvcApplication.java | 0 .../CustomMessageSourceConfiguration.java | 0 .../config/FaviconConfiguration.java | 0 .../jsfapplication/JsfApplication.java | 0 .../controller/JsfController.java | 0 .../jsfapplication/model/Dao.java | 0 .../jsfapplication/model/Todo.java | 0 .../jsfapplication/model/TodoDao.java | 0 .../jsfapplication/service/TodoService.java | 0 .../springbootmvc/model/LoginForm.java | 0 .../baeldung/swagger2boot/Application.java | 0 .../configuration/SpringFoxConfig.java | 0 .../controller/RegularRestController.java | 0 .../com/baeldung/swagger2boot/model/User.java | 0 .../plugin/EmailAnnotationPlugin.java | 0 .../repository/UserRepository.java | 0 .../src/main/resources/application.properties | 0 .../resources/com/baeldung/images/favicon.ico | Bin .../src/main/resources/favicon.ico | Bin .../src/main/resources/logback.xml | 0 .../src/main/resources/messages.properties | 0 .../src/main/resources/messages_fr.properties | 0 .../src/main/resources/mysql.properties | 0 .../src/main/resources/static/favicon.ico | Bin .../src/main/resources/static/index.html | 0 .../resources/templates/thymeleaf/index.html | 0 .../src/main/webapp/WEB-INF/faces-config.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../src/main/webapp/index.xhtml | 0 .../src/main/webapp/js/jquery.js | 0 .../src/main/webapp/js/script-async-jquery.js | 0 .../src/main/webapp/js/script-async.js | 0 .../src/main/webapp/js/script.js | 0 .../src/main/webapp/todo.xhtml | 0 .../accessparamsjs/ControllerUnitTest.java | 0 .../com/baeldung/rss/RssFeedUnitTest.java | 0 .../LoginControllerUnitTest.java | 0 .../org/baeldung/SpringContextLiveTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../spring-boot-property-exp}/README.md | 0 .../spring-boot-property-exp}/pom.xml | 0 .../property-exp-custom-config/pom.xml | 0 .../SpringBootPropertyExpansionApp.java | 0 .../components/PropertyLoggerBean.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/banner.txt | 0 .../src/main/resources/logback.xml | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../property-exp-default-config/build.gradle | 0 .../gradle.properties | 0 .../property-exp-default-config/pom.xml | 2 +- .../settings.gradle | 0 .../SpringBootPropertyExpansionApp.java | 0 .../components/PropertyLoggerBean.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/banner.txt | 0 .../src/main/resources/logback.xml | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../spring-boot-runtime}/README.md | 0 .../disabling-console-jul/.gitignore | 0 .../disabling-console-jul/README.md | 0 .../disabling-console-jul/pom.xml | 0 .../properties/DisablingConsoleJulApp.java | 0 .../DisabledConsoleRestController.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logging.properties | 0 .../disabling-console-log4j2/.gitignore | 0 .../disabling-console-log4j2/README.md | 0 .../disabling-console-log4j2/pom.xml | 0 .../log4j2/xml/DisablingConsoleLog4j2App.java | 0 .../DisabledConsoleRestController.java | 0 .../src/main/resources/log4j2.xml | 0 .../disabling-console-logback/.gitignore | 0 .../disabling-console-logback/README.md | 0 .../disabling-console-logback/pom.xml | 0 .../xml/DisablingConsoleLogbackApp.java | 0 .../DisabledConsoleRestController.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback-spring.xml | 0 .../spring-boot-runtime}/docker/Dockerfile | 0 .../spring-boot-runtime}/docker/logback.xml | 0 .../spring-boot-runtime}/docker/run.sh | 0 .../spring-boot-runtime}/pom.xml | 8 +- .../changeport/CustomApplication.java | 0 .../changeport/ServerPortCustomizer.java | 0 .../main/java/com/baeldung/cors/Account.java | 0 .../com/baeldung/cors/AccountController.java | 0 .../com/baeldung/restart/Application.java | 0 .../baeldung/restart/RestartController.java | 0 .../com/baeldung/restart/RestartService.java | 0 .../sampleapp/config/MainApplication.java | 0 .../sampleapp/config/RestClientConfig.java | 0 .../baeldung/sampleapp/config/WebConfig.java | 0 ...RestTemplateHeaderModifierInterceptor.java | 0 .../repository/HeavyResourceRepository.java | 0 .../BarMappingExamplesController.java | 0 .../web/controller/CompanyController.java | 0 .../controller/DeferredResultController.java | 0 .../controller/HeavyResourceController.java | 0 .../web/controller/ItemController.java | 0 .../web/controller/MyFooController.java | 0 .../web/controller/PactController.java | 0 .../web/controller/SimplePostController.java | 0 .../mediatypes/CustomMediaTypeController.java | 0 .../redirect/RedirectController.java | 0 .../sampleapp/web/dto/BaeldungItem.java | 0 .../sampleapp/web/dto/BaeldungItemV2.java | 0 .../baeldung/sampleapp/web/dto/Company.java | 0 .../com/baeldung/sampleapp/web/dto/Foo.java | 0 .../sampleapp/web/dto/HeavyResource.java | 0 .../web/dto/HeavyResourceAddressOnly.java | 0 .../HeavyResourceAddressPartialUpdate.java | 0 .../com/baeldung/sampleapp/web/dto/Item.java | 0 .../sampleapp/web/dto/ItemManager.java | 0 .../baeldung/sampleapp/web/dto/PactDto.java | 0 .../com/baeldung/sampleapp/web/dto/Views.java | 0 .../exception/ResourceNotFoundException.java | 0 .../com/baeldung/shutdown/Application.java | 0 .../com/baeldung/shutdown/ShutdownConfig.java | 0 .../com/baeldung/shutdown/TerminateBean.java | 0 .../shutdown/shutdown/ShutdownController.java | 0 .../logging/LoggingApplication.java | 0 .../management/logging/LoggingController.java | 0 .../management/logging/SecurityConfig.java | 0 .../spring/boot/management/trace/App.java | 0 .../trace/CustomTraceRepository.java | 0 .../boot/management/trace/EchoController.java | 0 .../management/trace/TraceRequestFilter.java | 0 .../com/baeldung/web/log/app/Application.java | 0 .../log/app/TaxiFareRequestInterceptor.java | 0 .../config/CustomeRequestLoggingFilter.java | 0 .../config/RequestLoggingFilterConfig.java | 0 .../web/log/config/TaxiFareMVCConfig.java | 0 .../log/controller/TaxiFareController.java | 0 .../com/baeldung/web/log/data/RateCard.java | 0 .../com/baeldung/web/log/data/TaxiRide.java | 0 .../service/TaxiFareCalculatorService.java | 0 .../web/log/util/RequestLoggingUtil.java | 0 .../main/resources/application-log.properties | 0 .../resources/application-logging.properties | 0 .../resources/application-tomcat.properties | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 .../src/main/webapp/WEB-INF/api-servlet.xml | 0 .../src/main/webapp/WEB-INF/company.html | 0 .../src/main/webapp/WEB-INF/spring-views.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../restart/RestartApplicationManualTest.java | 0 .../ShutdownApplicationIntegrationTest.java | 0 ...eavyResourceControllerIntegrationTest.java | 0 .../TaxiFareControllerIntegrationTest.java | 0 .../application-integrationtest.properties | 0 .../src/test/resources/application.properties | 0 .../spring-boot}/.gitignore | 10 +- .../.mvn/wrapper/maven-wrapper.properties | 0 .../spring-boot}/README.MD | 0 .../spring-boot}/mvnw | 0 .../spring-boot}/mvnw.cmd | 290 +++++----- .../spring-boot}/pom.xml | 536 +++++++++--------- .../SpringBootAnnotatedApp.java | 0 .../SpringBootPlainApp.java | 0 .../components/AttrListener.java | 0 .../components/EchoServlet.java | 0 .../components/HelloFilter.java | 0 .../components/HelloServlet.java | 0 .../application/Application.java | 56 +- .../controllers/UserController.java | 106 ++-- .../application/entities/User.java | 100 ++-- .../repositories/UserRepository.java | 18 +- .../bootcustomfilters/FilterConfig.java | 0 .../SpringBootFiltersApplication.java | 0 .../controller/UserController.java | 0 .../filters/RequestResponseLoggingFilter.java | 0 .../filters/TransactionFilter.java | 0 .../bootcustomfilters/model/User.java | 0 .../baeldung/buildproperties/Application.java | 0 .../buildproperties/BuildInfoService.java | 0 .../chaosmonkey/SpringBootChaosMonkeyApp.java | 0 .../controller/PermissionsController.java | 0 .../service/PermissionsService.java | 0 .../baeldung/displayallbeans/Application.java | 0 .../controller/FooController.java | 46 +- .../displayallbeans/service/FooService.java | 32 +- .../dynamicvalidation/ContactInfo.java | 0 .../ContactInfoValidator.java | 0 .../DynamicValidationApp.java | 0 .../config/CustomerController.java | 0 .../config/PersistenceConfig.java | 0 .../dao/ContactInfoExpressionRepository.java | 0 .../model/ContactInfoExpression.java | 0 .../dynamicvalidation/model/Customer.java | 0 .../ErrorHandlingApplication.java | 0 .../controllers/IndexController.java | 0 .../controllers/MyErrorController.java | 0 .../FailureAnalyzerApplication.java | 0 ...yBeanNotOfRequiredTypeFailureAnalyzer.java | 0 .../com/baeldung/failureanalyzer/MyDAO.java | 0 .../baeldung/failureanalyzer/MySecondDAO.java | 0 .../baeldung/failureanalyzer/MyService.java | 0 .../com/baeldung/git/CommitIdApplication.java | 0 .../baeldung/git/CommitInfoController.java | 0 .../src/main/java/com/baeldung/git/README.md | 0 .../java/com/baeldung/graphql/Author.java | 0 .../java/com/baeldung/graphql/AuthorDao.java | 0 .../com/baeldung/graphql/AuthorResolver.java | 0 .../graphql/GraphqlConfiguration.java | 0 .../java/com/baeldung/graphql/Mutation.java | 0 .../main/java/com/baeldung/graphql/Post.java | 0 .../java/com/baeldung/graphql/PostDao.java | 0 .../com/baeldung/graphql/PostResolver.java | 0 .../main/java/com/baeldung/graphql/Query.java | 0 .../InternationalizationApp.java | 0 .../config/MvcConfig.java | 0 .../config/PageController.java | 0 .../src/main/java/com/baeldung/intro/App.java | 22 +- .../intro/controller/HomeController.java | 36 +- .../com/baeldung/jsondateformat/Contact.java | 0 .../baeldung/jsondateformat/ContactApp.java | 0 .../jsondateformat/ContactAppConfig.java | 0 .../jsondateformat/ContactController.java | 0 .../ContactWithJavaUtilDate.java | 0 .../baeldung/jsondateformat/PlainContact.java | 0 .../PlainContactWithJavaUtilDate.java | 0 .../com/baeldung/kong/QueryController.java | 0 .../main/java/com/baeldung/kong/StockApp.java | 0 .../com/baeldung/rss/ArticleFeedView.java | 0 .../baeldung/rss/ArticleRssController.java | 0 .../com/baeldung/rss/CustomContainer.java | 0 .../main/java/com/baeldung/rss/RssApp.java | 0 .../WarInitializerApplication.java | 0 .../baeldung/servlets/ApplicationMain.java | 0 .../configuration/WebAppInitializer.java | 0 .../configuration/WebMvcConfigure.java | 0 .../baeldung/servlets/props/Constants.java | 0 .../servlets/props/PropertyLoader.java | 0 .../servlets/props/PropertySourcesLoader.java | 0 .../servlets/GenericCustomServlet.java | 0 .../servlets/javaee/AnnotationServlet.java | 0 .../servlets/javaee/EEWebXmlServlet.java | 0 .../SpringRegistrationBeanServlet.java | 0 .../embedded/EmbeddedTomcatExample.java | 0 .../ShutdownHookApplication.java | 28 +- .../baeldung/shutdownhooks/beans/Bean1.java | 28 +- .../baeldung/shutdownhooks/beans/Bean2.java | 28 +- .../baeldung/shutdownhooks/beans/Bean3.java | 16 +- .../config/ExampleServletContextListener.java | 36 +- .../config/ShutdownHookConfiguration.java | 50 +- .../java/com/baeldung/toggle/Employee.java | 0 .../baeldung/toggle/EmployeeRepository.java | 0 .../baeldung/toggle/FeatureAssociation.java | 0 .../com/baeldung/toggle/FeaturesAspect.java | 0 .../java/com/baeldung/toggle/MyFeatures.java | 0 .../com/baeldung/toggle/SalaryController.java | 0 .../com/baeldung/toggle/SalaryService.java | 0 .../baeldung/toggle/ToggleApplication.java | 0 .../baeldung/toggle/ToggleConfiguration.java | 0 .../com/baeldung/utils/UtilsApplication.java | 0 .../utils/controller/UtilsController.java | 0 .../java/org/baeldung/boot/Application.java | 0 .../org/baeldung/boot/config/H2JpaConfig.java | 0 .../org/baeldung/boot/config/WebConfig.java | 0 .../controller/servlet/HelloWorldServlet.java | 0 .../servlet/SpringHelloWorldServlet.java | 0 .../converter/GenericBigDecimalConverter.java | 0 .../converter/StringToEmployeeConverter.java | 0 .../StringToEnumConverterFactory.java | 0 .../StringToEmployeeConverterController.java | 0 .../java/org/baeldung/boot/domain/Modes.java | 0 .../org/baeldung/boot/jsoncomponent/User.java | 0 .../jsoncomponent/UserCombinedSerializer.java | 0 .../jsoncomponent/UserJsonDeserializer.java | 0 .../jsoncomponent/UserJsonSerializer.java | 0 .../common/error/MyCustomErrorController.java | 48 +- .../SpringHelloServletRegistrationBean.java | 30 +- .../error/controller/ErrorController.java | 44 +- .../MyServletContainerCustomizationBean.java | 50 +- .../ExecutorServiceExitCodeGenerator.java | 56 +- .../org/baeldung/demo/DemoApplication.java | 0 .../org/baeldung/demo/boottest/Employee.java | 0 .../demo/boottest/EmployeeRepository.java | 0 .../demo/boottest/EmployeeRestController.java | 0 .../demo/boottest/EmployeeService.java | 0 .../demo/boottest/EmployeeServiceImpl.java | 0 .../baeldung/demo/components/FooService.java | 0 .../demo/exceptions/CommonException.java | 0 .../demo/exceptions/FooNotFoundException.java | 0 .../java/org/baeldung/demo/model/Foo.java | 0 .../demo/repository/FooRepository.java | 0 .../baeldung/demo/service/FooController.java | 0 .../info/TotalUsersInfoContributor.java | 0 .../baeldung/main/SpringBootApplication.java | 126 ++-- .../main/java/org/baeldung/model/User.java | 0 .../baeldung/repository/UserRepository.java | 0 .../session/exception/Application.java | 0 .../exception/repository/FooRepository.java | 0 .../repository/FooRepositoryImpl.java | 0 .../baeldung/startup/AppStartupRunner.java | 0 .../startup/CommandLineAppStartupRunner.java | 0 .../main/resources/META-INF/spring.factories | 0 .../application-errorhandling.properties | 0 .../src/main/resources/application.properties | 148 ++--- .../src/main/resources/banner.txt | 0 .../src/main/resources/build.properties | 0 .../spring-boot}/src/main/resources/build.yml | 0 .../src/main/resources/custom.properties | 0 .../src/main/resources/data-expressions.sql | 0 .../spring-boot}/src/main/resources/data.sql | 0 .../src/main/resources/demo.properties | 0 .../src/main/resources/graphql/blog.graphqls | 0 .../src/main/resources/logback.xml | 0 .../src/main/resources/messages.properties | 0 .../src/main/resources/messages_fr.properties | 0 .../persistence-generic-entity.properties | 0 .../src/main/resources/public}/error/404.html | 0 .../src/main/resources/schema-expressions.sql | 0 .../src/main/resources/schema.sql | 0 .../src/main/resources/shutdown/shutdown.bat | 0 .../resources/static/internationalization.js | 0 .../main/resources/templates/customer.html | 0 .../main/resources/templates/customers.html | 0 .../resources/templates/displayallbeans.html | 0 .../main/resources/templates/error-404.html | 0 .../main/resources/templates/error-500.html | 0 .../src/main/resources/templates/error.html | 0 .../main/resources/templates}/error/404.html | 14 +- .../main/resources/templates/external.html | 0 .../src/main/resources/templates/index.html | 0 .../resources/templates/international.html | 0 .../src/main/resources/templates/layout.html | 0 .../src/main/resources/templates/other.html | 0 .../src/main/resources/templates/utils.html | 0 .../src/main/webapp/WEB-INF/context.xml | 0 .../src/main/webapp/WEB-INF/dispatcher.xml | 0 .../src/main/webapp/WEB-INF/web.xml | 0 .../src/main/webapp/annotationservlet.jsp | 0 .../spring-boot}/src/main/webapp/index.jsp | 0 ...otWithServletComponentIntegrationTest.java | 0 ...ithoutServletComponentIntegrationTest.java | 0 .../UserControllerIntegrationTest.java | 142 ++--- .../BuildInfoServiceIntegrationTest.java | 0 .../DisplayBeanIntegrationTest.java | 202 +++---- .../FailureAnalyzerAppIntegrationTest.java | 0 .../failureanalyzer/utils/ListAppender.java | 0 .../baeldung/git/CommitIdIntegrationTest.java | 0 .../java/com/baeldung/intro/AppLiveTest.java | 0 .../jsondateformat/ContactAppUnitTest.java | 0 ...AppWithObjectMapperCustomizerUnitTest.java | 0 .../baeldung/kong/KongAdminAPILiveTest.java | 0 .../kong/KongLoadBalanceLiveTest.java | 0 .../com/baeldung/kong/domain/APIObject.java | 0 .../baeldung/kong/domain/ConsumerObject.java | 0 .../baeldung/kong/domain/KeyAuthObject.java | 0 .../baeldung/kong/domain/PluginObject.java | 0 .../baeldung/kong/domain/TargetObject.java | 0 .../baeldung/kong/domain/UpstreamObject.java | 0 ...InitializerApplicationIntegrationTest.java | 0 .../toggle/ToggleIntegrationTest.java | 0 .../utils/UtilsControllerIntegrationTest.java | 0 .../boot/ApplicationIntegrationTest.java | 0 .../boot/DemoApplicationIntegrationTest.java | 0 .../UserJsonDeserializerIntegrationTest.java | 0 .../UserJsonSerializerIntegrationTest.java | 0 .../FooRepositoryIntegrationTest.java | 0 .../HibernateSessionIntegrationTest.java | 0 .../NoHibernateSessionIntegrationTest.java | 0 .../CustomConverterIntegrationTest.java | 0 ...yeeConverterControllerIntegrationTest.java | 0 .../EmployeeControllerIntegrationTest.java | 0 .../EmployeeRepositoryIntegrationTest.java | 0 ...EmployeeRestControllerIntegrationTest.java | 0 .../EmployeeServiceImplIntegrationTest.java | 0 .../org/baeldung/demo/boottest/JsonUtil.java | 0 .../UserRepositoryIntegrationTest.java | 0 .../application-integrationtest.properties | 0 .../src/test/resources/application.properties | 0 .../src/test/resources/conversion.properties | 0 .../resources/exception-hibernate.properties | 0 .../src/test/resources/exception.properties | 0 .../src/test/resources/import.sql | 0 .../src/test/resources/logback-test.xml | 0 .../resources/org/baeldung/boot/expected.json | 0 spring-boot/.factorypath | 174 ------ 704 files changed, 1303 insertions(+), 1501 deletions(-) delete mode 100644 spring-boot-libraries/.mvn/wrapper/maven-wrapper.jar rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/README.md (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/pom.xml (96%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/application/Application.java (97%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/application/controllers/UserController.java (96%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/application/entities/User.java (95%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/application/repositories/UserRepository.java (97%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/EcommerceApplication.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/controller/OrderController.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/controller/ProductController.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/dto/OrderProductDto.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/exception/ApiExceptionHandler.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/exception/ResourceNotFoundException.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/model/Order.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/model/OrderProduct.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/model/OrderProductPK.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/model/OrderStatus.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/model/Product.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/repository/OrderProductRepository.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/repository/OrderRepository.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/repository/ProductRepository.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/service/OrderProductService.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/service/OrderProductServiceImpl.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/service/OrderService.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/service/OrderServiceImpl.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/service/ProductService.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/java/com/baeldung/ecommerce/service/ProductServiceImpl.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/.angular-cli.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/.editorconfig (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/.gitignore (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/README.md (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/e2e/app.e2e-spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/e2e/app.po.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/e2e/tsconfig.e2e.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/karma.conf.js (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/package-lock.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/package.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/protractor.conf.js (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/app-routing.module.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/app.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/app.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/app.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/app.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/app.module.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/model/user.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/service/user.service.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/service/user.service.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-form/user-form.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-form/user-form.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-form/user-form.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-form/user-form.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-list/user-list.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-list/user-list.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-list/user-list.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/app/user-list/user-list.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/assets/.gitkeep (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/environments/environment.prod.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/environments/environment.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/favicon.ico (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/index.html (80%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/main.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/polyfills.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/styles.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/tsconfig.app.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/tsconfig.spec.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/src/typings.d.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/tsconfig.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/application/tslint.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/.editorconfig (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/README.md (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/angular.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/e2e/protractor.conf.js (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/e2e/src/app.e2e-spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/e2e/src/app.po.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/e2e/tsconfig.e2e.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/package-lock.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/package.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/proxy-conf.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/app.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/app.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/app.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/app.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/app.module.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/models/product-order.model.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/models/product-orders.model.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/models/product.model.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/products/products.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/products/products.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/products/products.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/products/products.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/services/EcommerceService.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.html (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.spec.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/assets/.gitkeep (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/browserslist (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/environments/environment.prod.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/environments/environment.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/favicon.ico (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/index.html (69%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/karma.conf.js (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/main.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/polyfills.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/styles.css (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/test.ts (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/tsconfig.app.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/tsconfig.spec.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/src/tslint.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/tsconfig.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/js/ecommerce/tslint.json (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/resources/application.properties (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/main/resources/logback.xml (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/test/java/com/baeldung/ecommerce/EcommerceApplicationIntegrationTest.java (100%) rename {spring-boot-angular => spring-boot-modules/spring-boot-angular}/src/test/java/org/baeldung/SpringContextTest.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/.gitignore (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/README.md (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/cloudfoundry/manifest.yml (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/openshift/configmap.yml (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/pom.xml (99%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/appengine/app.yaml (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/fabric8/deployment.yml (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/Application.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/cloud/config/CloudDataSourceConfig.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/config/SecurityConfig.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/persistence/model/Book.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/persistence/repo/BookRepository.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/springbootconfiguration/Application.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/springbootconfiguration/PersonService.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/web/BookController.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/web/RestExceptionHandler.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/web/SimpleController.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/web/exception/BookIdMismatchException.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/java/com/baeldung/web/exception/BookNotFoundException.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/application-beanstalk.properties (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/application-gcp.properties (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/application-local.properties (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/application-mysql.properties (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/application.properties (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/logback-gcp.xml (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/logback.xml (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/spring-cloud-bootstrap.properties (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/templates/error.html (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/main/resources/templates/home.html (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/test/java/com/baeldung/SpringBootBootstrapLiveTest.java (100%) rename {spring-boot-bootstrap => spring-boot-modules/spring-boot-bootstrap}/src/test/java/com/baeldung/SpringContextTest.java (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/README.md (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/bash/groovy.sh (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/bash/setup.sh (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/groovy/data/DataConfig.groovy (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/groovy/security/Security.groovy (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/groovy/test/Test.groovy (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/groovy/yml/Application.groovy (100%) rename {spring-boot-cli => spring-boot-modules/spring-boot-cli}/groovy/yml/config/application.yml (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/.gitignore (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/README.MD (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/pom.xml (98%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/java/org/baeldung/boot/Application.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/java/org/baeldung/boot/client/Details.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/java/org/baeldung/boot/client/DetailsServiceClient.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/java/org/baeldung/websocket/client/Message.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/java/org/baeldung/websocket/client/MyStompSessionHandler.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/java/org/baeldung/websocket/client/StompClient.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/main/resources/logback.xml (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/test/java/com/baeldung/websocket/client/MyStompSessionHandlerIntegrationTest.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/test/java/org/baeldung/SpringContextTest.java (100%) rename {spring-boot-client => spring-boot-modules/spring-boot-client}/src/test/java/org/baeldung/boot/client/DetailsServiceClientIntegrationTest.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/README.md (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-application/README.md (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-application/pom.xml (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-application/src/main/java/com/baeldung/data/jpa/ApplicationFound.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-application/src/main/java/com/baeldung/data/jpa/application/ApplicationNotFound.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-application/src/test/java/com/baeldung/data/jpa/DataJpaUnitTest.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-library/README.md (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-library/pom.xml (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-library/src/main/java/com/baeldung/data/jpa/libarary/model/Example.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-library/src/test/java/com/baeldung/data/jpa/TestApplication.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/data-jpa-library/src/test/java/com/baeldung/data/jpa/libarary/DataJpaUnitTest.java (100%) rename {spring-boot-config-jpa-error => spring-boot-modules/spring-boot-config-jpa-error}/pom.xml (96%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/README.md (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/pom.xml (99%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/compare/ComparisonApplication.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/compare/StartupEventHandler.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/springbootconfiguration/SpringBootConfigurationApplication.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/springbootconfiguration/controller/GreetingsController.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/java/com/baeldung/springbootsimple/TomcatController.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/resources/application.properties (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/main/resources/logback.xml (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/test/java/com/baeldung/springbootconfiguration/SpringContextTest.java (100%) rename {spring-boot-deployment => spring-boot-modules/spring-boot-deployment}/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationIntegrationTest.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/README.md (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/pom.xml (98%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationApplication.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessor.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/autoconfig/PriceCalculationAutoConfig.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/calculator/GrossPriceCalculator.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/calculator/NetPriceCalculator.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/calculator/PriceCalculator.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/environmentpostprocessor/service/PriceCalculationService.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/properties/ConfProperties.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/properties/ExternalPropertyConfigurer.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/java/com/baeldung/properties/ExternalPropertyFileLoader.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/resources/META-INF/spring.factories (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/resources/application.properties (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/resources/external/conf.properties (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/main/resources/logback.xml (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/test/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessorLiveTest.java (100%) rename {spring-boot-environment => spring-boot-modules/spring-boot-environment}/src/test/java/com/baeldung/properties/ExternalPropertyFileLoaderIntegrationTest.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/README.md (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/pom.xml (96%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/Application.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/controller/ArticleWorkflowController.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/domain/Approval.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/domain/Article.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/service/ArticleWorkflowService.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/service/PublishArticleService.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/java/com/baeldung/service/SendMailService.java (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/resources/application.properties (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/main/resources/processes/article-workflow.bpmn20.xml (100%) rename {spring-boot-flowable => spring-boot-modules/spring-boot-flowable}/src/test/java/com/baeldung/processes/ArticleWorkflowIntegrationTest.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/.gitignore (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/README.md (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/pom.xml (96%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/java/com/baeldung/jasypt/Main.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/java/com/baeldung/jasypt/simple/AppConfigForJasyptSimple.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/java/com/baeldung/jasypt/simple/PropertyServiceForJasyptSimple.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/java/com/baeldung/jasypt/starter/AppConfigForJasyptStarter.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/java/com/baeldung/jasypt/starter/PropertyServiceForJasyptStarter.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/resources/application.properties (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/resources/encrypted.properties (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/resources/encryptedv2.properties (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/main/resources/logback.xml (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/test/java/com/baeldung/jasypt/CustomJasyptIntegrationTest.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/test/java/com/baeldung/jasypt/JasyptSimpleIntegrationTest.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/test/java/com/baeldung/jasypt/JasyptWithStarterIntegrationTest.java (100%) rename {spring-boot-jasypt => spring-boot-modules/spring-boot-jasypt}/src/test/java/org/baeldung/SpringContextTest.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/.gitignore (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/README.md (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/mvnw (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/mvnw.cmd (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/pom.xml (99%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/Application.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/dto/Task.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/main/resources/application-problem.properties (100%) rename {spring-boot-libraries => spring-boot-modules/spring-boot-libraries}/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/.gitignore (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/README.md (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/pom.xml (98%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/springbootmvc/SpringBootMvcFnApplication.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/springbootmvc/ctrl/ProductController.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/springbootmvc/model/Product.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/springbootmvc/svc/ProductService.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/swagger2boot/SpringBootSwaggerApplication.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/swagger2boot/config/Swagger2Config.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/swagger2boot/controller/FooController.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/java/com/baeldung/swagger2boot/model/Foo.java (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/resources/application.properties (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/resources/logback.xml (100%) rename {spring-boot-mvc-2 => spring-boot-modules/spring-boot-mvc-2}/src/main/resources/swagger-description.yml (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/.gitignore (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/README.md (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/pom.xml (98%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/accessparamsjs/App.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/accessparamsjs/Controller.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/Bike.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/Biker.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/Car.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/CarMechanic.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/CarUtility.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/CustomException.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/Driver.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/Engine.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/PerformanceAspect.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/Vehicle.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/VehicleController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/VehicleRepository.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/VehicleRestController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/annotations/VehicleService.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanA.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java (93%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/nosuchbeandefinitionexception/NoSuchBeanDefinitionDemoApp.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/responseentity/CustomResponseController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/responseentity/CustomResponseWithBuilderController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/rss/RssFeedApplication.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/rss/RssFeedController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/rss/RssFeedView.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/scheduling/ScheduledJob.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/scheduling/SchedulingApplication.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootannotations/MySQLAutoconfiguration.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/LoggingController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/LoginController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/SpringBootMvcApplication.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/config/CustomMessageSourceConfiguration.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/config/FaviconConfiguration.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/jsfapplication/JsfApplication.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/jsfapplication/controller/JsfController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Dao.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Todo.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/TodoDao.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/jsfapplication/service/TodoService.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/springbootmvc/model/LoginForm.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/swagger2boot/Application.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/swagger2boot/model/User.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/application.properties (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/com/baeldung/images/favicon.ico (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/favicon.ico (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/logback.xml (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/messages.properties (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/messages_fr.properties (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/mysql.properties (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/static/favicon.ico (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/static/index.html (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/resources/templates/thymeleaf/index.html (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/WEB-INF/faces-config.xml (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/WEB-INF/web.xml (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/index.xhtml (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/js/jquery.js (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/js/script-async-jquery.js (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/js/script-async.js (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/js/script.js (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/main/webapp/todo.xhtml (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/test/java/com/baeldung/rss/RssFeedUnitTest.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/test/java/com/baeldung/springbootmvc/LoginControllerUnitTest.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/test/java/org/baeldung/SpringContextLiveTest.java (100%) rename {spring-boot-mvc => spring-boot-modules/spring-boot-mvc}/src/test/java/org/baeldung/SpringContextTest.java (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/README.md (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/pom.xml (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/pom.xml (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/src/main/resources/application.properties (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/src/main/resources/banner.txt (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/src/main/resources/logback.xml (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-custom-config/src/test/java/org/baeldung/SpringContextTest.java (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/build.gradle (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/gradle.properties (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/pom.xml (95%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/settings.gradle (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/src/main/resources/application.properties (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/src/main/resources/banner.txt (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/src/main/resources/logback.xml (100%) rename {spring-boot-property-exp => spring-boot-modules/spring-boot-property-exp}/property-exp-default-config/src/test/java/org/baeldung/SpringContextTest.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/README.md (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/.gitignore (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/README.md (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/pom.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/DisablingConsoleJulApp.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/controllers/DisabledConsoleRestController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/src/main/resources/application.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-jul/src/main/resources/logging.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-log4j2/.gitignore (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-log4j2/README.md (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-log4j2/pom.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/DisablingConsoleLog4j2App.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/controllers/DisabledConsoleRestController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-log4j2/src/main/resources/log4j2.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/.gitignore (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/README.md (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/pom.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/DisablingConsoleLogbackApp.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/controllers/DisabledConsoleRestController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/src/main/resources/application.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/disabling-console-logback/src/main/resources/logback-spring.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/docker/Dockerfile (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/docker/logback.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/docker/run.sh (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/pom.xml (96%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/changeport/CustomApplication.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/cors/Account.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/cors/AccountController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/restart/Application.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/restart/RestartController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/restart/RestartService.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/config/MainApplication.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/config/WebConfig.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/Company.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/Item.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/dto/Views.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/shutdown/Application.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/shutdown/ShutdownConfig.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/shutdown/TerminateBean.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/shutdown/shutdown/ShutdownController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/trace/App.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/app/Application.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/data/RateCard.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/data/TaxiRide.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/resources/application-log.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/resources/application-logging.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/resources/application-tomcat.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/resources/application.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/resources/logback.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/webapp/WEB-INF/api-servlet.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/webapp/WEB-INF/company.html (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/webapp/WEB-INF/spring-views.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/main/webapp/WEB-INF/web.xml (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/test/java/com/baeldung/restart/RestartApplicationManualTest.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/test/java/com/baeldung/shutdown/ShutdownApplicationIntegrationTest.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/test/resources/application-integrationtest.properties (100%) rename {spring-boot-runtime => spring-boot-modules/spring-boot-runtime}/src/test/resources/application.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/.gitignore (89%) rename {spring-boot => spring-boot-modules/spring-boot}/.mvn/wrapper/maven-wrapper.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/README.MD (100%) rename {spring-boot => spring-boot-modules/spring-boot}/mvnw (100%) rename {spring-boot => spring-boot-modules/spring-boot}/mvnw.cmd (97%) rename {spring-boot => spring-boot-modules/spring-boot}/pom.xml (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/beanvalidation/application/Application.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/beanvalidation/application/entities/User.java (95%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/bootcustomfilters/FilterConfig.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/bootcustomfilters/SpringBootFiltersApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/bootcustomfilters/filters/RequestResponseLoggingFilter.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/bootcustomfilters/filters/TransactionFilter.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/bootcustomfilters/model/User.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/buildproperties/Application.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/buildproperties/BuildInfoService.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/displayallbeans/Application.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/displayallbeans/controller/FooController.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/displayallbeans/service/FooService.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/errorhandling/ErrorHandlingApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/errorhandling/controllers/IndexController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/failureanalyzer/MyBeanNotOfRequiredTypeFailureAnalyzer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/failureanalyzer/MyDAO.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/failureanalyzer/MySecondDAO.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/failureanalyzer/MyService.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/git/CommitIdApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/git/CommitInfoController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/git/README.md (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/Author.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/AuthorDao.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/AuthorResolver.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/GraphqlConfiguration.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/Mutation.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/Post.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/PostDao.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/PostResolver.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/graphql/Query.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/internationalization/InternationalizationApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/internationalization/config/MvcConfig.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/internationalization/config/PageController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/intro/App.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/intro/controller/HomeController.java (95%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/Contact.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/ContactApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/ContactAppConfig.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/ContactController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/ContactWithJavaUtilDate.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/PlainContact.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/jsondateformat/PlainContactWithJavaUtilDate.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/kong/QueryController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/kong/StockApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/rss/ArticleFeedView.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/rss/ArticleRssController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/rss/CustomContainer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/rss/RssApp.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/ApplicationMain.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/configuration/WebAppInitializer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/props/Constants.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/props/PropertyLoader.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/servlets/GenericCustomServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/servlets/javaee/EEWebXmlServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/servlets/springboot/SpringRegistrationBeanServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/servlets/servlets/springboot/embedded/EmbeddedTomcatExample.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java (95%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java (95%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/Employee.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/EmployeeRepository.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/FeatureAssociation.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/FeaturesAspect.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/MyFeatures.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/SalaryController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/SalaryService.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/ToggleApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/toggle/ToggleConfiguration.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/utils/UtilsApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/com/baeldung/utils/controller/UtilsController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/Application.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/config/H2JpaConfig.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/config/WebConfig.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/controller/servlet/HelloWorldServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/controller/servlet/SpringHelloWorldServlet.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/converter/GenericBigDecimalConverter.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/converter/StringToEmployeeConverter.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/converter/StringToEnumConverterFactory.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/converter/controller/StringToEmployeeConverterController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/domain/Modes.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/jsoncomponent/User.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/common/error/MyCustomErrorController.java (95%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/common/error/controller/ErrorController.java (95%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/DemoApplication.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/boottest/Employee.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/boottest/EmployeeRepository.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/boottest/EmployeeRestController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/boottest/EmployeeService.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/boottest/EmployeeServiceImpl.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/components/FooService.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/exceptions/CommonException.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/exceptions/FooNotFoundException.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/model/Foo.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/repository/FooRepository.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/demo/service/FooController.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/main/SpringBootApplication.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/model/User.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/repository/UserRepository.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/session/exception/Application.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/session/exception/repository/FooRepository.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/startup/AppStartupRunner.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/java/org/baeldung/startup/CommandLineAppStartupRunner.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/META-INF/spring.factories (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/application-errorhandling.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/application.properties (96%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/banner.txt (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/build.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/build.yml (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/custom.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/data-expressions.sql (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/data.sql (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/demo.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/graphql/blog.graphqls (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/logback.xml (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/messages.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/messages_fr.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/persistence-generic-entity.properties (100%) rename {spring-boot/src/main/resources/templates => spring-boot-modules/spring-boot/src/main/resources/public}/error/404.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/schema-expressions.sql (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/schema.sql (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/shutdown/shutdown.bat (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/static/internationalization.js (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/customer.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/customers.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/displayallbeans.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/error-404.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/error-500.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/error.html (100%) rename {spring-boot/src/main/resources/public => spring-boot-modules/spring-boot/src/main/resources/templates}/error/404.html (88%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/external.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/index.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/international.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/layout.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/other.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/resources/templates/utils.html (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/webapp/WEB-INF/context.xml (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/webapp/WEB-INF/dispatcher.xml (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/webapp/WEB-INF/web.xml (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/webapp/annotationservlet.jsp (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/main/webapp/index.jsp (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java (97%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/failureanalyzer/FailureAnalyzerAppIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/failureanalyzer/utils/ListAppender.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/intro/AppLiveTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/jsondateformat/ContactAppUnitTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/jsondateformat/ContactAppWithObjectMapperCustomizerUnitTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/KongAdminAPILiveTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/KongLoadBalanceLiveTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/domain/APIObject.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/domain/ConsumerObject.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/domain/KeyAuthObject.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/domain/PluginObject.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/domain/TargetObject.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/kong/domain/UpstreamObject.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/servletinitializer/WarInitializerApplicationIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/converter/CustomConverterIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/demo/boottest/EmployeeControllerIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/demo/boottest/EmployeeRepositoryIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/demo/boottest/EmployeeServiceImplIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/demo/boottest/JsonUtil.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/application-integrationtest.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/application.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/conversion.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/exception-hibernate.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/exception.properties (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/import.sql (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/logback-test.xml (100%) rename {spring-boot => spring-boot-modules/spring-boot}/src/test/resources/org/baeldung/boot/expected.json (100%) delete mode 100644 spring-boot/.factorypath diff --git a/pom.xml b/pom.xml index 2a0ae0d8d8..4c6d5496d9 100644 --- a/pom.xml +++ b/pom.xml @@ -637,30 +637,8 @@ spring-batch spring-bom - - spring-boot - spring-boot-modules - spring-boot-angular - spring-boot-bootstrap - - spring-boot-client - spring-boot-config-jpa-error - spring-boot-deployment - spring-boot-di - spring-boot-environment - spring-boot-flowable - spring-boot-jasypt - spring-boot-libraries - spring-boot-mvc-2 spring-boot-parent - spring-boot-performance - spring-boot-property-exp - spring-boot-rest - spring-boot-runtime - spring-boot-runtime/disabling-console-jul - spring-boot-runtime/disabling-console-log4j2 - spring-boot-runtime/disabling-console-logback spring-boot-security spring-caching @@ -1159,31 +1137,8 @@ spring-batch spring-bom - - spring-boot - spring-boot-modules - spring-boot-angular - spring-boot-bootstrap - - spring-boot-client - spring-boot-config-jpa-error - spring-boot-deployment - spring-boot-di - spring-boot-environment - spring-boot-flowable - spring-boot-jasypt - spring-boot-libraries - spring-boot-mvc - spring-boot-mvc-2 spring-boot-parent - spring-boot-performance - spring-boot-property-exp - spring-boot-rest - spring-boot-runtime - spring-boot-runtime/disabling-console-jul - spring-boot-runtime/disabling-console-log4j2 - spring-boot-runtime/disabling-console-logback spring-boot-security spring-caching diff --git a/spring-boot-libraries/.mvn/wrapper/maven-wrapper.jar b/spring-boot-libraries/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 zcmb@tV|1n6wzeBvGe*U>ZQHh;%-Bg)Y}={WHY%yuwkkF%MnzxVwRUS~wY|@J_gP;% z^VfXZ{5793?z><89(^dufT2xlYVOQnYG>@?lA@vQF|UF0&X7tk8BUf?wq2J& zZe&>>paKUg4@;fwk0yeUPvM$yk)=f>TSFFB^a8f|_@mbE#MaBnd5qf6;hXq}c%IeK zn7gB0Kldbedq-vl@2wxJi{$%lufroKUjQLSFmt|<;M8~<5otM5ur#Dgc@ivmwRiYZW(Oco7kb8DWmo|a{coqYMU2raB9r6e9viK6MI3c&%jp05-Tf*O#6@8Ra=egYy01 z-V!G;_omANEvU-8!*>*)lWka9M<+IkNsrsenbXOfLc6qrYe`;lpst;vfs*70$z9UM zq%L>pFCOr$X*|9&3L2h;?VA9-IU*iR6FiGlJ=b~DzE5s^thxXUs4%~*zD#K&k>wZAU8 zpaa!M+Z-zjkfGK15N!&o<3=cgbZV7%ex@j^)Q9V`q^i;Fsbkbe6eHJ;dx{QbdCCs1 zdxq^WxoPsr`eiK3D0Ep}k$ank-0G&+lY!ZHDZBYEx%% z2FyE?Lb0cflLB)kDIj;G=m`^UO<4h(RWdF-DT>p{1J5J90!K!AgC0)?jxPbm$KUjg zJED+#7xQmAmr`(S%BQTV-c97As~r3zD$E;3S)@}p5udA@m6pLgRL5h-;m>LvCq?&Q zokC7Vnk-zBEaa;=Y;6(LJHS>mOJV&%0YfRdUOqbKZy~b z(905jIW0Pg;y`Yv2t+RnDvL4yGEUX*tK)JT6TWn4ik~L)fX#tAV!d8)+A)qWtSjcr z7s|f%f;*%XW!jiRvv9ayj@f&dc|1tKDc{O3BWcLGsn-OYyXRLXEOEwP4k?c`nIut0 z?4S;eO@EoynmkxHq>QpDL1q^wOQxrl))2qya?dk05^5hK? z{P6;WKHUaHw9B0dd&|xw&CYN2fVrn};Gq<=Z^QZk3e~HzzY~JrnPCs0XwMp#B<9Gm zw0?7h#4EY%O-ub6mi&O2vcpIkuM?st;RtEpKSz^Xr#3WHhpsZd!gh|_jGQ`KA30T- zKlz9vgB;pY^}Uh??nQKSzk>2&J+Qi*r3DeX4^$%2ag9^x_YckA-f9p_;8ulh(8j9~ zes{O#{v!m%n^el(VryTF-C%xfJJ$rZj)|Y|8o&))q9CEwg2;Wz&xzyHD=@T_B%b}C z=8G^*4*J4#jUJn{7-3^U(_uUp6E8+GDt#le)nya-Q4kL5ZGiFxT4bF+mX`whcif*? z>CL&Ryn3HHT^^QmWYr<}Q1_Jj7fOh}cS8r+^R#at-CnNl3!1_$96&7nR}gh}))7a0J&z-_eI))+{RCt)r8|7|sV9o01^9nv?aePxMqwPP!x|sNmnn&6{K$K*mVX9lxSAmcqAV1(hKA-=coeTb*otxTOGYXsh zW$31^q7L@<#y~SUYoNKP1JK?4|FQNQb$i8mCG@WhX9i_^;@M2f#!nq7_K*M!4lGz1 z5tfADkO7BZDLgVQ?k7C)f;$eqjHI&zgxhf}x$8^ZEwFfm-qY=+M+fbS)9r8fFE5H9 zv{WPU35cR8%z;(W%5<>y+E&v84J4^Y##N!$B++RI`CZ1i3IW9Nau=*pSxW&^Ov-F> zex=&9XYLVcm1Y?am>2VC`%gMev9$#~; zYwxYvMfeKFsd!OBB@eOb2QNHFcsfKm;&z{OVEUiYmQ}~L@>$Ms@|Ptf3jQO-=Q;1+ zFCw+p+Z3lK_FmIAYnk2V;o915cDM}%Ht5RH%w}P>Yg9{h1mZ}~R6tUII4X7i4-2i% z2Uiw3_uHR!d~5(s;p6btI@-xhAkRg9K|n#}PNT9Dw9P>z$3>30lP1(=mcQ|tpyv3@ ze1qU!69OAx4s7$8r7Y-#5I`m!BXq`f!6C(BtUlG-oq+liqMCS_D@0nSFc%y+N6_Zh zi%L3LhF3zZP{d1)L&SXxPD(fp@T@J;jZeNaf$zl>vAh7=tI z2;wS^QyRdZm~)Ur&!af;8eB8*7(F96K^=WbC$)#TWvB~Awo5AtPf8Il4snD}Xsqd< z>cH+gcg72nTg5tl>oFbwdT{BDyy1=f=4~h~L$)UX;FXa;NdSlyF{(YLrx&VDp`pQI zh3pQtC=d8i1V6yUmFon*LQsNYWen?eO-gSZ4cvYcdEd0klSxcBYw+|5AyCv6TT96h z{7Yh9`h}biU?3oBFn=d8>Hn`1Q*w6rgeX^QbC-WFwjY}Int0;qUny4WMjIee@#0%l z>YAWLVCNo1lp$>9L$Tx`t!dp?>5Pfbhc*!*wzfWkj_x`Q?`3Jc@9r8uq~dgb+lgeh zlA`eUal3e2ZnWQSSYB>qy#85^>j7!=uO-hG5*erp22NaC81#Ytioc>r?D9$b_JiC+ zSp)8KR$%}FjFNRkeE#c5vKbXNJDBoO< z)73Jt7Y|3v45efud1xkg2GO3OwYfsuBV`f6S_D>Aoh2%=`1Y$bHP>0kBvTSowX57H z&1nbbx=IT>X^ScKYL&&{LNq~^UNgR|at`D;SxTYpLvnj_F*bGgNV2tEl1k$ccA&NW zmX(LV*>Op)BOgoric(98mIU)$eUa&jM5bKlnOrHm$p^v@u;W0J)!@XWg+#X=9En(-tiw!l?65rD=zzl(+%<)bI{ZN;SRco{jO;>7 zlSY|TIxuN|d#YHx^^~>iYj2V>cC>wQwWzGVI!6#epjJ6tl_`7tDY17WMKMB@s*Jr& zXOs*@>EwQ6s>M13eZEBJ#q0|;8jao{wK4keesH9?$OSk~_3#*x`8fAzQa7fprQ6(Z zi$}B%m81y*S)RxaX;wW!5{{EDw8)IE3XDRO1Y^%TMr}c|Y>WBAKT=b*K&uMT(?JSl zO>gVtl_bKQ$??TeWr7wYO+Vbl?CTQj?JrW&td`|#@;R2Gca9jq^p`{@)KY97o3}Af zfTh{pUUWD;P7sq=I!lA6;*hq0Nq`F56T)x$K?BMOk}tptYw(%$?*otp2N6IF3#GgqM46Cda!qzvGZcMgcGV`bY5ZIfOB6^;US#WgRai zq#vS8ZqPY953|eFw<-p2Cakx|z#_{4pG}mk{EANI{PnK*CUslvS8whko=OTe13|It z>{O2p=mmanR2-n>LQHaMo}noWCmjFO@7^z~`Y{V>O`@rT{yBS=VXsb}*Pi_zDqM3? zjCZqWR}fEzAkms+Hiq8~qRAFvo}dVW{1gcZ?v&PdX?UG*yS}zT9g7nZ!F1WRH}sHA zJ4~B2Br~8?uhbaX!3g+7=3fVM)q^wEzv**rk5e34==NRCV z3G$G5B!DICFslm)c){oesa_0muLxGoq`xYVNURl*NhE#v2>y9vDz&vJwrB`Q>DhN# zY2GnY!Y^8E%PU0}haXL$8a5QN1-&7NWuC~{62j| z2ozmFyx8GpOzj?&KK1JF28;E8H_p4N^LMm9K0y}!lCxcK79eFGTtGm?7jy?t94Q@X zli|our1#|>f*68fyA0bSn=YisYSl8HB(dFN4Y$qb7p4DR0YQt=^eEMnJkgiM48$>QV6x5*^a|D|t zMPDk}u<^YEYrt|H&hy)DRk%rDIb{LTo;h7=fp^J9Lr&`{9`8_pS*tQ_$KXB$2#5{h z-&yPbN-zInq{7aYZuaItS8-2Mb4OQe2jD*&)0~898E|HlAq`o!M&It@vvnj z_y@))>~_oR%S8OfmFTGYIat^#8_YKMqWLac<^}RZFDcJqvSJa>&6HaLS7p-$)QyL= zHrO|t75`d41Bp37RZtKR%g^%o@9C5Ce=CjuvVQ-KI#Uw2WWa>cho;jztUt~Le*_pT zkfA2iif9QFp;vhd)|A?tdAQ?9o~?EqgL;=)eKFQ{E^u?OIP}fl^5A;$^ZVutCIqj5 z&*i+G?!Px|5~~6zTYf>~uw*kM`5p&Hju&#w!7^An3*mQwTK22wC7p^OsvMjWf`$MY zLX|ZFV#+>Uq2!QyRD9cgbI9nswteMAMWtK(_=d%r?TLrx?_rkjbjI(rbK#T9Gn}J| z5ajow3ZErpw+%}YfVL-q^{r~##xJ^_ux2yO1!LJZXg)>F70STV=&Ruwp&XP^_?$h0 zn>$a?!>N+Kt$UXzg`e+szB}*uw)Z$uL6?>*!0IrE)SgV~#a?Qgg7HuTsu3ncrcs|l z=sQSMtr}S!sQ4SriKg=M`1Y|bC`XJ+J(YT)op!Q);kj0_e)YNVNw8SI|1f%9%X?i5>$lLE(Wfc$wY?(O985d5e*)UPtF!7gG3(Kd z-^=-%-wWCEK`r4oFh^{|;Ci%W^P>K%9dBNDqi%c$Q{iY#(zbwN7~pQI=SHd%WuV7Z zO?0P;Zc6yeN;)IbJIP0=>W)EgE!76jM^?IyQ*D(T})1NGmP z~YAb6T^#R6;)Ls;cV~LWk z33lcLpbSjxStw9Z>Nv&+rPOXxCGB=?ttZs?{OF7;GYlV&w7-82POb$XrogqFpLA2`j&MLZXr=IG>PAFSb2np~x;E_kV{ zsDwbK$?iYRn7$;mHYZhQn6P2#_hXAHd?;q~!Zy}%;@%wT3u|Sa-!WxxOE_fwyFv*Db@>X;Rl+fK1oP?55*dN0#2%SuikZ)y7Kx>`8*9d?}5 zKvXF7J5&Ey6{A8qUFxrFOh<$xdSWV^dw7z|`7RVZJhAwO72V zRrM_3*wI`^ycl7~>6KaCYBr#WGR>}B)Q(V%&$MhVrU>u~ql zjGeZF&>=_ld$oY!V}5}Gb> z*iP38KOav9RHY)0uITwgz99w- zJX-0BGCdY*$c7pi@>@-`2>#>}c(DHaI62ntpKz z`c01Z#u7WuMZ71!jl7hv5|o61+uv5nG?*dffEL~328P5HlKh2&RQ;9X@f>c1x<>v= zZWNSz3Ii~oyAsKCmbd}|$2%ZN&3gc9>(NV=Z4Fnz2F@)PPbx1wwVMsUn=-G=cqE3# zjY{G4OI~2o$|*iuswTg1=hcZK$C=0^rOt-aOwXuxU=*uT?yF00)6sE}ZAZyy*$ZTH zk!P*xILX#5RygHy{k?2((&pRQv9_Ew+wZ>KPho_o1-{~I*s1h8 zBse@ONdkk-8EG?r5qof}lwTxdmmEN|%qw(STW|PFsw1LD!h_Vjo;C4?@h|da4Y;*; zvApQ=T&=jWU39Uz=_yN@Bn0{{)yn8RZ2&X!<*KBv-7tcWdkF1Ij8D0mU zwbcs}0vDaLGd@xx%S_QZ1H)GTt`~>+#z}HXJTl9S!sd9seVJc|_wUMSdD$>k`K_RG zlq(fsnR@KM^;C}}&vG2t+}_nGPuI5ovg$6TYeMPIREGxP@2r~RKd@>gV`mq0XENsh z%IRZ-ZNP+4#J`o-yRpP;w@;CrSr3wiix3e9Qc|s(WapRq950P->g|JYC$A)$YrGeH zz5dKlAHAPJ>%?llqqB&#+#VU3sp=9>Xms1J;tSYN>LMwNtU68yr!})K4X>%^IrIDp z>SHy&6fJHybwS^BW>okFeaQp6wxaVP`hy;ZX#e+=w3c?PGD&_LmeqL8oZ*YaM1+#S z5WNAKo4+99JW(+qcMjh;+c%R#R?t;(aQ`2`C=bo((ERzgAwKKazXy*0wHN;v;P|f> zBW&?`h#_I^?Bc5GX7XP@|MOiw%&-#?EQ|w+FdCl_&qPN&s$|Z17UCF9oXS#N z)px6>zm&}0osTnCGI;AXsj`q=LpIsW4x}q~70uey5N_NpdJ*Gv^@$g@f2{EB>LP7Y zE5P`jZh1vHNgk7LfMT({jLCjRZa4ubW;UA#%<@Zj?efrPdm{W3J5UEFgm`YkVqz;AMFetZuM5uQpvORb1GDX`WZGwTrF z46+&sAri5QXCfGYpdgonWR5`>ZEa;?jrKvfNvXF<&l)1uU-3q#4X16R2~?P0yg3H` zfw82QWZo^cac+%(g^_6`+2>~Fvy{pOCGnj86+=-!N`GPWAjus1ejhn6f4|mDkU6EE z&u~;xfdRMkj=h;4d~~+4(>L8weT3cz9e@E11EH!tX<IC!@kS+dsIQA`HQ2vdoS zzSD0U?mb1M0@qXu{yhZk2Y6}2B-AvvYg|tRr6z*_*2l*VLiR6G;M{O^Znq~LI%=I_ zCEU{htx&Bo+69G`p|A@R>KlY1*;;!{aWq?Pc0Cu!mT-0S`!>3<@s%Ri;utYNQ+CXDj+LC5<*$4*$-mogGg^S~3JRv{ry zPJzKJg!XKb>P}yJVc^1V@T&MV{z;@DLhvV{dG?RogCcPkROivliSr58>5Zw&&A2?n z9`JOLU;eQGaOr6GB(u{t3!+$NaLge$x#M&*sg!J;m~rRc)Ij5|?KX_4WiM-eE%t8e zqUM7eZ~ZonavR;K4g2t$4Fj=UVyEHM7LPb%8#0?Ks{~?!qhx9)2^>rg8{0npLtFKR zJB)19TFiD^T7IUXA8wt!@n5gj&@OK~EO}MR6^qd?^-?%-0~b2K9RWh+_mSEQQWsLCFOt#JlAQMgNxvv-m z;sF*r;WZ*Wi@I|6pMN+|_rLYKlWwvpKZY9rA;fo8l8hFQGI?4#kt1-r4UL;nPF@{~ z2T~a@2>yD|GuU55boxoIIe_BFo2Vq&rs&2itv|B>OC*bIeOqMBRw~y5KRMwiVHc)` zIBdliiY?Ai7*+k#NZf3MW5!hya~RZ6r7k)b?HF0e(n`ZX=iCpT7St`FDwL@SGgKlq zNnnU*3IcnYDzJg{7V$cb`xeb4(s(({&%f69XMTw-JQErS%?X_}?&y&tvHw@>1v{#R z4J@(=el^kRI+jGa;4)l#v%-jM^$~0ulxh6-{w*4Lsa>Tuc z>ElR3uM~GUChI)c{TW${73A3$vs<&iH;e?4HjW2MvSz9tp9@69+`_@x{Qte^eFo5IlAi&zw$=t6u8K%8JtjRI88PFNM7R>DaCO3rgngmk zI-RMOyt@kr-gVra=tl^@J#tI7M$dird(?aU!`&1xcm~2;dHN(RCxh4H((f|orQ!BS zu;(3Vn+^doXaqlhnjBJj-)w?5{;EEZTMx+?G>Rp4U^g<_yw_blAkdbj=5YrNhZB9@ zNmW=-!yFx5?5aF^+6*1XI|s3lIn_eyh`uv%?liNzSC#z&z^R(mqEYL@TdWzgkf>g1 zedzs*={eJavn{8vF%4nf@et<@wkOPR>NiVuYtESbFXQ;sDz_;|ITVeoW|me5>jN5P z5--{13JT{3ktkAf9M;Jty)yectg#{+9sK{C;2CvPU81tB3{8S5>hK{EXdVe?fR?sd8m`V zPM*$)g$HKp0~9Xf6#z!YJ&g!%VkCMxkt>ofE!62?#-&%|95^)JJ9 zk;GlJdoH0HwtDF(_aTv}mt$?EyRyE6@pm5DG~Gj-2%3HcZT13e)$)z99bdK_WCx|Q zQNza(R)Z>ZKTn8oIdcw%c^pFaMpFZ4HOds!BODgSBWJJYW3I_WJvoEm4xsfs%#LZ6 zdPCk{5XJ>2f7Hj-i*9lTW6BKCIuy)3L!b3(uPoSgW1WA+OEYYBRgSsJq7wjHh%c8ymMs3FU%~cprqL*084p*^T3{J%Gwq`jB30n(&y6- zII8-_r-s5&CVtsoNZ9%On?7yn;oZG03-$wx^uRk9>b*ufh15|HHk|%=MA^ioyb9CYU$7y$4R|M5HvpiCTxKSU`LUg$+ zB3IBl&{qO}agqF~BFM6&11wMeR-#Rkuh_(^j+P4{;X_w|siva$5P`dykyhfAUD%e8 z+{G0|7(Q`_U91sMKFO^rHoCWfXi0$^ev)-187G}klYv@+Rf%uZ&T4-Uhh=)pcU6O1 znXc^c5)!$X+39|4`yNHuCj0wkm+K1VN0G3_EL?-ZH$p5Y*v6ec4MV zS~1~}ZUhl&i^4`Fa|zyH4I%rXp;D6{&@*^TPEX2;4aI$}H@*ROEyFfe^RZI%;T>X> z>WVSUmx@2gGBxkV&nfyPK=JI$HxRKUv(-*xA_C;lDxT|PgX*&YYdkrd5-*3E1OSXBs>35DLsHHp%zm+n0N(Yu{lMo>_t&d1Xy zfCxl=(CNNx>ze+7w)60mp>(M``Qn$aUrVb$cJAb6=Do7VgW`Qn2;v5{9tB)jP$_mB zn{Hb_sMs4yxK|!`PI7+zO68}{Iv)dpu!+ZZl)xuoVU(oFsm<3gT{j2c*ORl|Lt+?dR^M?0 znW6rNA)cR*ci;z?BaG(f(XynY_y+kTjj~T$9{N{>ITQ4-DmZ6{cOkoea9*LpYL{Apo0hSpLqJu z9`tjP&ei;%pn9QY>-$9=<73M#X;qGb+%Bt0x>=u`eDtthI+LWB9CdAO=ulZo9&Ohs2X8GW>b7#&U|py28KTvPBl#Nqv^{AgkVXrOyS z@%3)}$I&mJOYWoG$BBb)Kb~0ptDmBxHNH^i6B8FA7NR2HfTnjP?eDnoY4NS_aYg4P zGGPw11sAf^^fTkY#j@T#6Ll*^GVaPo-1;aS6_a}{r{tWZilzse2m zc?LS=B|EWxCD|!O%|%t3C@Rd7=rKJRsteAWRoDu|*Kx-QwYZQeYpGrZ_1J%mFM;*S*u=0 z%1OC9>kmCGqBBu#-1jVPRVW*BTv%3uPI8fO?JOZD#P_W^V+K7&KVB>hzZ@PdY*%Ezo;}|5Mk`Mo2m*_K%no*jDJGp(s9j;&U`Z>z zO#SEe)k!p$VE-j2xDoX$!;Up5%8x$c`GH$l+gTA*YQaE0jwCOA<*__2NkV){z_u2=4NQ zSk$(oj$%ygio?3V8T3IyGMYvPs`t{im2IoHs7or+>>MYvG%Q?PwOLqe%73uGh6Wn; zo>e7qI$9?%cVVkvQLOLKcU5n*`~qn8pzkdu=Z4#2VnhUy>S*;kT=NqA!dQtnE?wVg zOKobxJ|QCjk`!(2*~5NQx{{=Lr=)ndyn{V|&PxUa=xQXVU?#M24F8H%C*uvs(#Va0 zSkp}0EFYq0#9xp&$O?gIInc#^^_6Ol88W%)S5A@HeE0(SR&!Yl>u=*5JEoUViDR@2 zJBjTsp=Y44W`Nb2+*CcZCkwP(QChX1s)b09DEIZCKt1$q2~;&DJ9!{bQ1Y6&T_9u1 zZM8^im8Wf#FUO6tZqc7#`z0cN_JA>#U_b7he%?cCnlV2&47y5Fc)Z7bp5xGe1zNq9 zl1VaV-tsm3fY=oIX^SPl!P;9$o?**0brq#ShM~3CXhh^SK0oOKB9O>;q3G@ z&4&h$mLSgohc^5IC|H>IGfZvVQFUT>T$|U7{znY`56<5d)07oiv*2R0+-BGPPkWJ! zIOzKF+<5o2YLWP|SGCx8w@<>u6K1o`++xJ+6kaJrt<&0Haq zyUccgxI$sR07Vo9-pF);heBva;?&NcAzC*gSSG9B3c?A;IH9J zl$j%F4*8;F0;H2Cjo*kWz4{kSh?nX}23&&KL+U(#nOAuR`wn@uwUNkWEgb*ZShKPy z`aXTJT4f*Um4`iv2KOfzf-~`#pOfH8>is*xnLBDTyx2Xuc8Y2Od6z((P2AZK@b_96 z#0V6jdw>sEDJ#uNGV|EshD1g&bYZCzCZTZ)286HLHc8Eyy_HPi;d#%;Wx}d6tUUxq z_VB$+898z_{9-A<*v6VI7?(dC04o!8$>DQ$OdbrA_@<6auiBNp{Dw$Hs@@gcybIQT zAU7Pc5YEX&&9IZ~iDo&V`&8K$-4o$)g?wF8xdv1I8-n}1bc7tviIBqt z#iIl1Hn;W?>2&#bU#VZ1wxq(7z=Q15#0yoz)#|r`KSPKI-{aN%l61^?B4RMDt?Vk` z)G#K6vUN?C!t{Q<@O4$0(qI>$U@@TI2FVF;AhSSb5}LtXx&=k&8%MWM3wv;Xq0p~W z#ZX;QFv5G9-i6=+d;R7Dwi)ciIZ1_V!aw;K^etau+g0fOA2HXpV#LQZGzf?h#@}(o z|3w!sZ|&mp$;tmDiO=zef5C|Alz+@@4u5#yZ7yNpP=&`432%a{K#{;nsS!jwk-$Qs zZRty}+N`Y~)c8|$&ra{bOQWM2K7qa}4Y{ndK%dKp&{ zFCvX{PAy_C{xzS_-`0>JlPP7&5!5 zBQ$NQz^z#2y-VeIxnfY|RzU`w+1t6vwQ|wM)LlpuaUzYehGII;>2DYyR|~wC@l97s zgX=f*1qtfDyco%BHmN+o<2qoi`D67R+RM$$NN5-moE4kx3MCFfuip*45nComOZKQf z3!(8tkSdhY5+A%@Y=eVEZkXU3S6B2V-R$ZuRIXWhsrJg3g)p4vXY@RV60bKuG zT6T!enE<;(A{*HPQhae*(@_!maV~AWD4EOwq10tkCXq+HPoe_Pu?d4Kg=2ypcs?&f zLa>mEmPF4ucJ%i~fEsNIa{QmQU27%Abh|w(`q)s~He5$5WYQ_wNJX6Qop<=7;I1jd zNZak`}0lVm+^O!i;|Lwo}ofXuJ)*UtH4xaPm*R7?YS*<&D__=@Kki>{f_Z-XqM;Tj195+~@d;rx zh5pj8oMuupWa#E(%85**I~1Zat-Sa^_R11-CiKdd`8m(DGuzOm9lX$Dd!DX!_Al}d zS!-|}dWG80S;`jSKDH%Uv;-OJNeBI0Bp$z->{_>1KU%h&Af7nns(L=xRN1 zLvOP=*UWIr)_5G2+fCsUV7mV|D>-~_VnvZ3_>=9 z_bL6`eK%W*9eJ34&Puz^@^ZIyoF@%DTun#OOEdUEn8>N9q(}?5*?`o?!_<(i%yc`k zf!xXD6SQscHgPgiHt>x6{n{+}%azrfV4VHi#umyi0;11c816`E??2`$;Rc`)qA2H( z5L|{o=ut7Te=^~@cR0_#cah0?w0Me$&>}ga8xxy=?DDl#}S~Y z4o2n`%IyGjQEP%8qS|v(kFK&RCJbF1gsRVJ>ceSjU`LuYJu%C>SRV#l`)ShD&KKzv ztD<9l0lcW0UQ8xjv|1NXRrCZhZh3JFX_BNT@V|u9$o~8M=cjOX|5iBS|9PAGPvQLc z6sA~BTM(~!c&V=5<}ZIx}O7A;|&bd7vR_y)t+ z?Vm7kb^gJ88g;!fRfMTSvKaPozQz4WcYD8l#0WxQ${P%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 5e5a68b954..e28b077d5c 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -14,21 +14,36 @@ + spring-boot spring-boot-admin + spring-boot-angular spring-boot-artifacts - spring-boot-ctx-fluent spring-boot-autoconfiguration + spring-boot-bootstrap + spring-boot-client + spring-boot-config-jpa-error + spring-boot-ctx-fluent + spring-boot-deployment spring-boot-camel + spring-boot-custom-starter spring-boot-crud spring-boot-data + spring-boot-environment + spring-boot-flowable + spring-boot-jasypt spring-boot-keycloak + spring-boot-libraries spring-boot-logging-log4j2 spring-boot-kotlin + spring-boot-mvc + spring-boot-mvc-2 spring-boot-mvc-birt spring-boot-nashorn spring-boot-properties + spring-boot-property-exp + spring-boot-runtime spring-boot-springdoc spring-boot-testing spring-boot-vue diff --git a/spring-boot-angular/README.md b/spring-boot-modules/spring-boot-angular/README.md similarity index 100% rename from spring-boot-angular/README.md rename to spring-boot-modules/spring-boot-angular/README.md diff --git a/spring-boot-angular/pom.xml b/spring-boot-modules/spring-boot-angular/pom.xml similarity index 96% rename from spring-boot-angular/pom.xml rename to spring-boot-modules/spring-boot-angular/pom.xml index d78761e921..5cfc530100 100644 --- a/spring-boot-angular/pom.xml +++ b/spring-boot-modules/spring-boot-angular/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-angular/src/main/java/com/baeldung/application/Application.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/Application.java similarity index 97% rename from spring-boot-angular/src/main/java/com/baeldung/application/Application.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/Application.java index f1155c3106..0101ea3a3b 100644 --- a/spring-boot-angular/src/main/java/com/baeldung/application/Application.java +++ b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/Application.java @@ -1,28 +1,28 @@ -package com.baeldung.application; - -import com.baeldung.application.entities.User; -import com.baeldung.application.repositories.UserRepository; -import java.util.stream.Stream; -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - - @Bean - CommandLineRunner init(UserRepository userRepository) { - return args -> { - Stream.of("John", "Julie", "Jennifer", "Helen", "Rachel").forEach(name -> { - User user = new User(name, name.toLowerCase() + "@domain.com"); - userRepository.save(user); - }); - userRepository.findAll().forEach(System.out::println); - }; - } -} +package com.baeldung.application; + +import com.baeldung.application.entities.User; +import com.baeldung.application.repositories.UserRepository; +import java.util.stream.Stream; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + CommandLineRunner init(UserRepository userRepository) { + return args -> { + Stream.of("John", "Julie", "Jennifer", "Helen", "Rachel").forEach(name -> { + User user = new User(name, name.toLowerCase() + "@domain.com"); + userRepository.save(user); + }); + userRepository.findAll().forEach(System.out::println); + }; + } +} diff --git a/spring-boot-angular/src/main/java/com/baeldung/application/controllers/UserController.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/controllers/UserController.java similarity index 96% rename from spring-boot-angular/src/main/java/com/baeldung/application/controllers/UserController.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/controllers/UserController.java index 14c90d5b10..a87ac4e8d1 100644 --- a/spring-boot-angular/src/main/java/com/baeldung/application/controllers/UserController.java +++ b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/controllers/UserController.java @@ -1,31 +1,31 @@ -package com.baeldung.application.controllers; - -import com.baeldung.application.entities.User; -import com.baeldung.application.repositories.UserRepository; -import java.util.List; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@CrossOrigin(origins = "http://localhost:4200") -public class UserController { - - private final UserRepository userRepository; - - public UserController(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @GetMapping("/users") - public List getUsers() { - return (List) userRepository.findAll(); - } - - @PostMapping("/users") - void addUser(@RequestBody User user) { - userRepository.save(user); - } -} +package com.baeldung.application.controllers; + +import com.baeldung.application.entities.User; +import com.baeldung.application.repositories.UserRepository; +import java.util.List; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@CrossOrigin(origins = "http://localhost:4200") +public class UserController { + + private final UserRepository userRepository; + + public UserController(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @GetMapping("/users") + public List getUsers() { + return (List) userRepository.findAll(); + } + + @PostMapping("/users") + void addUser(@RequestBody User user) { + userRepository.save(user); + } +} diff --git a/spring-boot-angular/src/main/java/com/baeldung/application/entities/User.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/entities/User.java similarity index 95% rename from spring-boot-angular/src/main/java/com/baeldung/application/entities/User.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/entities/User.java index 4c346fa5b9..ea23edc7e2 100644 --- a/spring-boot-angular/src/main/java/com/baeldung/application/entities/User.java +++ b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/entities/User.java @@ -1,43 +1,43 @@ -package com.baeldung.application.entities; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; - -@Entity -public class User { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private long id; - private final String name; - private final String email; - - public User() { - this.name = ""; - this.email = ""; - } - - public User(String name, String email) { - this.name = name; - this.email = email; - } - - public long getId() { - return id; - } - - public String getName() { - return name; - } - - public String getEmail() { - return email; - } - - @Override - public String toString() { - return "User{" + "id=" + id + ", name=" + name + ", email=" + email + '}'; - } -} +package com.baeldung.application.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + private final String name; + private final String email; + + public User() { + this.name = ""; + this.email = ""; + } + + public User(String name, String email) { + this.name = name; + this.email = email; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getEmail() { + return email; + } + + @Override + public String toString() { + return "User{" + "id=" + id + ", name=" + name + ", email=" + email + '}'; + } +} diff --git a/spring-boot-angular/src/main/java/com/baeldung/application/repositories/UserRepository.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/repositories/UserRepository.java similarity index 97% rename from spring-boot-angular/src/main/java/com/baeldung/application/repositories/UserRepository.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/repositories/UserRepository.java index 5a81cadcbe..7bd71c2f86 100644 --- a/spring-boot-angular/src/main/java/com/baeldung/application/repositories/UserRepository.java +++ b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/application/repositories/UserRepository.java @@ -1,9 +1,9 @@ -package com.baeldung.application.repositories; - -import com.baeldung.application.entities.User; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; -import org.springframework.web.bind.annotation.CrossOrigin; - -@Repository -public interface UserRepository extends CrudRepository{} +package com.baeldung.application.repositories; + +import com.baeldung.application.entities.User; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; +import org.springframework.web.bind.annotation.CrossOrigin; + +@Repository +public interface UserRepository extends CrudRepository{} diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/EcommerceApplication.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/EcommerceApplication.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/EcommerceApplication.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/EcommerceApplication.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/OrderController.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/OrderController.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/OrderController.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/OrderController.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/ProductController.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/ProductController.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/ProductController.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/controller/ProductController.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/dto/OrderProductDto.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/dto/OrderProductDto.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/dto/OrderProductDto.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/dto/OrderProductDto.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ApiExceptionHandler.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ApiExceptionHandler.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ApiExceptionHandler.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ApiExceptionHandler.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ResourceNotFoundException.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ResourceNotFoundException.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ResourceNotFoundException.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/exception/ResourceNotFoundException.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Order.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Order.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Order.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Order.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProduct.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProduct.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProduct.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProduct.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProductPK.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProductPK.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProductPK.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderProductPK.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderStatus.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderStatus.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderStatus.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/OrderStatus.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Product.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Product.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Product.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/model/Product.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderProductRepository.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderProductRepository.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderProductRepository.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderProductRepository.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderRepository.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderRepository.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderRepository.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/OrderRepository.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/ProductRepository.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/ProductRepository.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/ProductRepository.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/repository/ProductRepository.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductService.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductService.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductService.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductService.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductServiceImpl.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductServiceImpl.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductServiceImpl.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderProductServiceImpl.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderService.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderService.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderService.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderService.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderServiceImpl.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderServiceImpl.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderServiceImpl.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/OrderServiceImpl.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductService.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductService.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductService.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductService.java diff --git a/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductServiceImpl.java b/spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductServiceImpl.java similarity index 100% rename from spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductServiceImpl.java rename to spring-boot-modules/spring-boot-angular/src/main/java/com/baeldung/ecommerce/service/ProductServiceImpl.java diff --git a/spring-boot-angular/src/main/js/application/.angular-cli.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/.angular-cli.json similarity index 100% rename from spring-boot-angular/src/main/js/application/.angular-cli.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/.angular-cli.json diff --git a/spring-boot-angular/src/main/js/application/.editorconfig b/spring-boot-modules/spring-boot-angular/src/main/js/application/.editorconfig similarity index 100% rename from spring-boot-angular/src/main/js/application/.editorconfig rename to spring-boot-modules/spring-boot-angular/src/main/js/application/.editorconfig diff --git a/spring-boot-angular/src/main/js/application/.gitignore b/spring-boot-modules/spring-boot-angular/src/main/js/application/.gitignore similarity index 100% rename from spring-boot-angular/src/main/js/application/.gitignore rename to spring-boot-modules/spring-boot-angular/src/main/js/application/.gitignore diff --git a/spring-boot-angular/src/main/js/application/README.md b/spring-boot-modules/spring-boot-angular/src/main/js/application/README.md similarity index 100% rename from spring-boot-angular/src/main/js/application/README.md rename to spring-boot-modules/spring-boot-angular/src/main/js/application/README.md diff --git a/spring-boot-angular/src/main/js/application/e2e/app.e2e-spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/e2e/app.e2e-spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/e2e/app.e2e-spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/e2e/app.e2e-spec.ts diff --git a/spring-boot-angular/src/main/js/application/e2e/app.po.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/e2e/app.po.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/e2e/app.po.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/e2e/app.po.ts diff --git a/spring-boot-angular/src/main/js/application/e2e/tsconfig.e2e.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/e2e/tsconfig.e2e.json similarity index 100% rename from spring-boot-angular/src/main/js/application/e2e/tsconfig.e2e.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/e2e/tsconfig.e2e.json diff --git a/spring-boot-angular/src/main/js/application/karma.conf.js b/spring-boot-modules/spring-boot-angular/src/main/js/application/karma.conf.js similarity index 100% rename from spring-boot-angular/src/main/js/application/karma.conf.js rename to spring-boot-modules/spring-boot-angular/src/main/js/application/karma.conf.js diff --git a/spring-boot-angular/src/main/js/application/package-lock.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/package-lock.json similarity index 100% rename from spring-boot-angular/src/main/js/application/package-lock.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/package-lock.json diff --git a/spring-boot-angular/src/main/js/application/package.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/package.json similarity index 100% rename from spring-boot-angular/src/main/js/application/package.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/package.json diff --git a/spring-boot-angular/src/main/js/application/protractor.conf.js b/spring-boot-modules/spring-boot-angular/src/main/js/application/protractor.conf.js similarity index 100% rename from spring-boot-angular/src/main/js/application/protractor.conf.js rename to spring-boot-modules/spring-boot-angular/src/main/js/application/protractor.conf.js diff --git a/spring-boot-angular/src/main/js/application/src/app/app-routing.module.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app-routing.module.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/app-routing.module.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app-routing.module.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/app.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.css similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/app.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.css diff --git a/spring-boot-angular/src/main/js/application/src/app/app.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.html similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/app.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.html diff --git a/spring-boot-angular/src/main/js/application/src/app/app.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/app.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.spec.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/app.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/app.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.component.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/app.module.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.module.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/app.module.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/app.module.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/model/user.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/model/user.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/model/user.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/model/user.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/service/user.service.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/service/user.service.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/service/user.service.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/service/user.service.spec.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/service/user.service.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/service/user.service.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/service/user.service.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/service/user.service.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.css similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.css diff --git a/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.html similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.html diff --git a/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.spec.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-form/user-form.component.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.css similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.css diff --git a/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.html similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.html diff --git a/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.spec.ts diff --git a/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/app/user-list/user-list.component.ts diff --git a/spring-boot-angular/src/main/js/application/src/assets/.gitkeep b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/assets/.gitkeep similarity index 100% rename from spring-boot-angular/src/main/js/application/src/assets/.gitkeep rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/assets/.gitkeep diff --git a/spring-boot-angular/src/main/js/application/src/environments/environment.prod.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/environments/environment.prod.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/environments/environment.prod.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/environments/environment.prod.ts diff --git a/spring-boot-angular/src/main/js/application/src/environments/environment.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/environments/environment.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/environments/environment.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/environments/environment.ts diff --git a/spring-boot-angular/src/main/js/application/src/favicon.ico b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/favicon.ico similarity index 100% rename from spring-boot-angular/src/main/js/application/src/favicon.ico rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/favicon.ico diff --git a/spring-boot-angular/src/main/js/application/src/index.html b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html similarity index 80% rename from spring-boot-angular/src/main/js/application/src/index.html rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html index 1ce7ff1ca6..903a7095b3 100644 --- a/spring-boot-angular/src/main/js/application/src/index.html +++ b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html @@ -7,11 +7,11 @@ - + - \ No newline at end of file + diff --git a/spring-boot-angular/src/main/js/application/src/main.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/main.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/main.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/main.ts diff --git a/spring-boot-angular/src/main/js/application/src/polyfills.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/polyfills.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/polyfills.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/polyfills.ts diff --git a/spring-boot-angular/src/main/js/application/src/styles.css b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/styles.css similarity index 100% rename from spring-boot-angular/src/main/js/application/src/styles.css rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/styles.css diff --git a/spring-boot-angular/src/main/js/application/src/tsconfig.app.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/tsconfig.app.json similarity index 100% rename from spring-boot-angular/src/main/js/application/src/tsconfig.app.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/tsconfig.app.json diff --git a/spring-boot-angular/src/main/js/application/src/tsconfig.spec.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/tsconfig.spec.json similarity index 100% rename from spring-boot-angular/src/main/js/application/src/tsconfig.spec.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/tsconfig.spec.json diff --git a/spring-boot-angular/src/main/js/application/src/typings.d.ts b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/typings.d.ts similarity index 100% rename from spring-boot-angular/src/main/js/application/src/typings.d.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/application/src/typings.d.ts diff --git a/spring-boot-angular/src/main/js/application/tsconfig.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/tsconfig.json similarity index 100% rename from spring-boot-angular/src/main/js/application/tsconfig.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/tsconfig.json diff --git a/spring-boot-angular/src/main/js/application/tslint.json b/spring-boot-modules/spring-boot-angular/src/main/js/application/tslint.json similarity index 100% rename from spring-boot-angular/src/main/js/application/tslint.json rename to spring-boot-modules/spring-boot-angular/src/main/js/application/tslint.json diff --git a/spring-boot-angular/src/main/js/ecommerce/.editorconfig b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/.editorconfig similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/.editorconfig rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/.editorconfig diff --git a/spring-boot-angular/src/main/js/ecommerce/README.md b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/README.md similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/README.md rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/README.md diff --git a/spring-boot-angular/src/main/js/ecommerce/angular.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/angular.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/angular.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/angular.json diff --git a/spring-boot-angular/src/main/js/ecommerce/e2e/protractor.conf.js b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/protractor.conf.js similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/e2e/protractor.conf.js rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/protractor.conf.js diff --git a/spring-boot-angular/src/main/js/ecommerce/e2e/src/app.e2e-spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/src/app.e2e-spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/e2e/src/app.e2e-spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/src/app.e2e-spec.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/e2e/src/app.po.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/src/app.po.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/e2e/src/app.po.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/src/app.po.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/e2e/tsconfig.e2e.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/tsconfig.e2e.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/e2e/tsconfig.e2e.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/e2e/tsconfig.e2e.json diff --git a/spring-boot-angular/src/main/js/ecommerce/package-lock.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/package-lock.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/package-lock.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/package-lock.json diff --git a/spring-boot-angular/src/main/js/ecommerce/package.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/package.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/package.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/package.json diff --git a/spring-boot-angular/src/main/js/ecommerce/proxy-conf.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/proxy-conf.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/proxy-conf.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/proxy-conf.json diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.css similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/app.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.css diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.html similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/app.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.html diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/app.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.spec.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/app.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.component.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/app.module.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.module.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/app.module.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/app.module.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.css similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.css diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.html similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.html diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.spec.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/ecommerce.component.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-order.model.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-order.model.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-order.model.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-order.model.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-orders.model.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-orders.model.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-orders.model.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product-orders.model.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product.model.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product.model.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product.model.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/models/product.model.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.css similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.css diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.html similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.html diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.spec.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/orders/orders.component.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.css similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.css diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.html similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.html diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.spec.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/products/products.component.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/services/EcommerceService.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/services/EcommerceService.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/services/EcommerceService.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/services/EcommerceService.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.css b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.css similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.css rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.css diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.html b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.html similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.html rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.html diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.spec.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.spec.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.spec.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.spec.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/app/ecommerce/shopping-cart/shopping-cart.component.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/assets/.gitkeep b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/assets/.gitkeep similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/assets/.gitkeep rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/assets/.gitkeep diff --git a/spring-boot-angular/src/main/js/ecommerce/src/browserslist b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/browserslist similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/browserslist rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/browserslist diff --git a/spring-boot-angular/src/main/js/ecommerce/src/environments/environment.prod.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/environments/environment.prod.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/environments/environment.prod.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/environments/environment.prod.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/environments/environment.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/environments/environment.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/environments/environment.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/environments/environment.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/favicon.ico b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/favicon.ico similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/favicon.ico rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/favicon.ico diff --git a/spring-boot-angular/src/main/js/ecommerce/src/index.html b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/index.html similarity index 69% rename from spring-boot-angular/src/main/js/ecommerce/src/index.html rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/index.html index 3faefb6e8c..2578673a0f 100644 --- a/spring-boot-angular/src/main/js/ecommerce/src/index.html +++ b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/index.html @@ -6,7 +6,7 @@ - + diff --git a/spring-boot-angular/src/main/js/ecommerce/src/karma.conf.js b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/karma.conf.js similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/karma.conf.js rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/karma.conf.js diff --git a/spring-boot-angular/src/main/js/ecommerce/src/main.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/main.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/main.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/main.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/polyfills.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/polyfills.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/polyfills.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/polyfills.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/styles.css b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/styles.css similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/styles.css rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/styles.css diff --git a/spring-boot-angular/src/main/js/ecommerce/src/test.ts b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/test.ts similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/test.ts rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/test.ts diff --git a/spring-boot-angular/src/main/js/ecommerce/src/tsconfig.app.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/tsconfig.app.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/tsconfig.app.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/tsconfig.app.json diff --git a/spring-boot-angular/src/main/js/ecommerce/src/tsconfig.spec.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/tsconfig.spec.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/tsconfig.spec.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/tsconfig.spec.json diff --git a/spring-boot-angular/src/main/js/ecommerce/src/tslint.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/tslint.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/src/tslint.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/src/tslint.json diff --git a/spring-boot-angular/src/main/js/ecommerce/tsconfig.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/tsconfig.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/tsconfig.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/tsconfig.json diff --git a/spring-boot-angular/src/main/js/ecommerce/tslint.json b/spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/tslint.json similarity index 100% rename from spring-boot-angular/src/main/js/ecommerce/tslint.json rename to spring-boot-modules/spring-boot-angular/src/main/js/ecommerce/tslint.json diff --git a/spring-boot-angular/src/main/resources/application.properties b/spring-boot-modules/spring-boot-angular/src/main/resources/application.properties similarity index 100% rename from spring-boot-angular/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-angular/src/main/resources/application.properties diff --git a/spring-boot-angular/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-angular/src/main/resources/logback.xml similarity index 100% rename from spring-boot-angular/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-angular/src/main/resources/logback.xml diff --git a/spring-boot-angular/src/test/java/com/baeldung/ecommerce/EcommerceApplicationIntegrationTest.java b/spring-boot-modules/spring-boot-angular/src/test/java/com/baeldung/ecommerce/EcommerceApplicationIntegrationTest.java similarity index 100% rename from spring-boot-angular/src/test/java/com/baeldung/ecommerce/EcommerceApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot-angular/src/test/java/com/baeldung/ecommerce/EcommerceApplicationIntegrationTest.java diff --git a/spring-boot-angular/src/test/java/org/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-angular/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-angular/src/test/java/org/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-angular/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-boot-bootstrap/.gitignore b/spring-boot-modules/spring-boot-bootstrap/.gitignore similarity index 100% rename from spring-boot-bootstrap/.gitignore rename to spring-boot-modules/spring-boot-bootstrap/.gitignore diff --git a/spring-boot-bootstrap/README.md b/spring-boot-modules/spring-boot-bootstrap/README.md similarity index 100% rename from spring-boot-bootstrap/README.md rename to spring-boot-modules/spring-boot-bootstrap/README.md diff --git a/spring-boot-bootstrap/cloudfoundry/manifest.yml b/spring-boot-modules/spring-boot-bootstrap/cloudfoundry/manifest.yml similarity index 100% rename from spring-boot-bootstrap/cloudfoundry/manifest.yml rename to spring-boot-modules/spring-boot-bootstrap/cloudfoundry/manifest.yml diff --git a/spring-boot-bootstrap/openshift/configmap.yml b/spring-boot-modules/spring-boot-bootstrap/openshift/configmap.yml similarity index 100% rename from spring-boot-bootstrap/openshift/configmap.yml rename to spring-boot-modules/spring-boot-bootstrap/openshift/configmap.yml diff --git a/spring-boot-bootstrap/pom.xml b/spring-boot-modules/spring-boot-bootstrap/pom.xml similarity index 99% rename from spring-boot-bootstrap/pom.xml rename to spring-boot-modules/spring-boot-bootstrap/pom.xml index a81908d8b6..1dc75c7e61 100644 --- a/spring-boot-bootstrap/pom.xml +++ b/spring-boot-modules/spring-boot-bootstrap/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-bootstrap/src/main/appengine/app.yaml b/spring-boot-modules/spring-boot-bootstrap/src/main/appengine/app.yaml similarity index 100% rename from spring-boot-bootstrap/src/main/appengine/app.yaml rename to spring-boot-modules/spring-boot-bootstrap/src/main/appengine/app.yaml diff --git a/spring-boot-bootstrap/src/main/fabric8/deployment.yml b/spring-boot-modules/spring-boot-bootstrap/src/main/fabric8/deployment.yml similarity index 100% rename from spring-boot-bootstrap/src/main/fabric8/deployment.yml rename to spring-boot-modules/spring-boot-bootstrap/src/main/fabric8/deployment.yml diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/Application.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/Application.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/Application.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/Application.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/cloud/config/CloudDataSourceConfig.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/cloud/config/CloudDataSourceConfig.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/cloud/config/CloudDataSourceConfig.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/cloud/config/CloudDataSourceConfig.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/config/SecurityConfig.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/config/SecurityConfig.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/config/SecurityConfig.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/config/SecurityConfig.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/persistence/model/Book.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/persistence/model/Book.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/persistence/model/Book.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/persistence/model/Book.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/persistence/repo/BookRepository.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/persistence/repo/BookRepository.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/persistence/repo/BookRepository.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/persistence/repo/BookRepository.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/web/BookController.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/BookController.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/web/BookController.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/BookController.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/web/RestExceptionHandler.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/RestExceptionHandler.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/web/RestExceptionHandler.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/RestExceptionHandler.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/web/SimpleController.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/SimpleController.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/web/SimpleController.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/SimpleController.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookIdMismatchException.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookIdMismatchException.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookIdMismatchException.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookIdMismatchException.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookNotFoundException.java b/spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookNotFoundException.java similarity index 100% rename from spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookNotFoundException.java rename to spring-boot-modules/spring-boot-bootstrap/src/main/java/com/baeldung/web/exception/BookNotFoundException.java diff --git a/spring-boot-bootstrap/src/main/resources/application-beanstalk.properties b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-beanstalk.properties similarity index 100% rename from spring-boot-bootstrap/src/main/resources/application-beanstalk.properties rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-beanstalk.properties diff --git a/spring-boot-bootstrap/src/main/resources/application-gcp.properties b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-gcp.properties similarity index 100% rename from spring-boot-bootstrap/src/main/resources/application-gcp.properties rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-gcp.properties diff --git a/spring-boot-bootstrap/src/main/resources/application-local.properties b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-local.properties similarity index 100% rename from spring-boot-bootstrap/src/main/resources/application-local.properties rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-local.properties diff --git a/spring-boot-bootstrap/src/main/resources/application-mysql.properties b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-mysql.properties similarity index 100% rename from spring-boot-bootstrap/src/main/resources/application-mysql.properties rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/application-mysql.properties diff --git a/spring-boot-bootstrap/src/main/resources/application.properties b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/application.properties similarity index 100% rename from spring-boot-bootstrap/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/application.properties diff --git a/spring-boot-bootstrap/src/main/resources/logback-gcp.xml b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/logback-gcp.xml similarity index 100% rename from spring-boot-bootstrap/src/main/resources/logback-gcp.xml rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/logback-gcp.xml diff --git a/spring-boot-bootstrap/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/logback.xml similarity index 100% rename from spring-boot-bootstrap/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/logback.xml diff --git a/spring-boot-bootstrap/src/main/resources/spring-cloud-bootstrap.properties b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/spring-cloud-bootstrap.properties similarity index 100% rename from spring-boot-bootstrap/src/main/resources/spring-cloud-bootstrap.properties rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/spring-cloud-bootstrap.properties diff --git a/spring-boot-bootstrap/src/main/resources/templates/error.html b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/templates/error.html similarity index 100% rename from spring-boot-bootstrap/src/main/resources/templates/error.html rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/templates/error.html diff --git a/spring-boot-bootstrap/src/main/resources/templates/home.html b/spring-boot-modules/spring-boot-bootstrap/src/main/resources/templates/home.html similarity index 100% rename from spring-boot-bootstrap/src/main/resources/templates/home.html rename to spring-boot-modules/spring-boot-bootstrap/src/main/resources/templates/home.html diff --git a/spring-boot-bootstrap/src/test/java/com/baeldung/SpringBootBootstrapLiveTest.java b/spring-boot-modules/spring-boot-bootstrap/src/test/java/com/baeldung/SpringBootBootstrapLiveTest.java similarity index 100% rename from spring-boot-bootstrap/src/test/java/com/baeldung/SpringBootBootstrapLiveTest.java rename to spring-boot-modules/spring-boot-bootstrap/src/test/java/com/baeldung/SpringBootBootstrapLiveTest.java diff --git a/spring-boot-bootstrap/src/test/java/com/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-bootstrap/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-bootstrap/src/test/java/com/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-bootstrap/src/test/java/com/baeldung/SpringContextTest.java diff --git a/spring-boot-cli/README.md b/spring-boot-modules/spring-boot-cli/README.md similarity index 100% rename from spring-boot-cli/README.md rename to spring-boot-modules/spring-boot-cli/README.md diff --git a/spring-boot-cli/bash/groovy.sh b/spring-boot-modules/spring-boot-cli/bash/groovy.sh similarity index 100% rename from spring-boot-cli/bash/groovy.sh rename to spring-boot-modules/spring-boot-cli/bash/groovy.sh diff --git a/spring-boot-cli/bash/setup.sh b/spring-boot-modules/spring-boot-cli/bash/setup.sh similarity index 100% rename from spring-boot-cli/bash/setup.sh rename to spring-boot-modules/spring-boot-cli/bash/setup.sh diff --git a/spring-boot-cli/groovy/data/DataConfig.groovy b/spring-boot-modules/spring-boot-cli/groovy/data/DataConfig.groovy similarity index 100% rename from spring-boot-cli/groovy/data/DataConfig.groovy rename to spring-boot-modules/spring-boot-cli/groovy/data/DataConfig.groovy diff --git a/spring-boot-cli/groovy/security/Security.groovy b/spring-boot-modules/spring-boot-cli/groovy/security/Security.groovy similarity index 100% rename from spring-boot-cli/groovy/security/Security.groovy rename to spring-boot-modules/spring-boot-cli/groovy/security/Security.groovy diff --git a/spring-boot-cli/groovy/test/Test.groovy b/spring-boot-modules/spring-boot-cli/groovy/test/Test.groovy similarity index 100% rename from spring-boot-cli/groovy/test/Test.groovy rename to spring-boot-modules/spring-boot-cli/groovy/test/Test.groovy diff --git a/spring-boot-cli/groovy/yml/Application.groovy b/spring-boot-modules/spring-boot-cli/groovy/yml/Application.groovy similarity index 100% rename from spring-boot-cli/groovy/yml/Application.groovy rename to spring-boot-modules/spring-boot-cli/groovy/yml/Application.groovy diff --git a/spring-boot-cli/groovy/yml/config/application.yml b/spring-boot-modules/spring-boot-cli/groovy/yml/config/application.yml similarity index 100% rename from spring-boot-cli/groovy/yml/config/application.yml rename to spring-boot-modules/spring-boot-cli/groovy/yml/config/application.yml diff --git a/spring-boot-client/.gitignore b/spring-boot-modules/spring-boot-client/.gitignore similarity index 100% rename from spring-boot-client/.gitignore rename to spring-boot-modules/spring-boot-client/.gitignore diff --git a/spring-boot-client/README.MD b/spring-boot-modules/spring-boot-client/README.MD similarity index 100% rename from spring-boot-client/README.MD rename to spring-boot-modules/spring-boot-client/README.MD diff --git a/spring-boot-client/pom.xml b/spring-boot-modules/spring-boot-client/pom.xml similarity index 98% rename from spring-boot-client/pom.xml rename to spring-boot-modules/spring-boot-client/pom.xml index 2cfd413e93..40a8690953 100644 --- a/spring-boot-client/pom.xml +++ b/spring-boot-modules/spring-boot-client/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-client/src/main/java/org/baeldung/boot/Application.java b/spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/boot/Application.java similarity index 100% rename from spring-boot-client/src/main/java/org/baeldung/boot/Application.java rename to spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/boot/Application.java diff --git a/spring-boot-client/src/main/java/org/baeldung/boot/client/Details.java b/spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/boot/client/Details.java similarity index 100% rename from spring-boot-client/src/main/java/org/baeldung/boot/client/Details.java rename to spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/boot/client/Details.java diff --git a/spring-boot-client/src/main/java/org/baeldung/boot/client/DetailsServiceClient.java b/spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/boot/client/DetailsServiceClient.java similarity index 100% rename from spring-boot-client/src/main/java/org/baeldung/boot/client/DetailsServiceClient.java rename to spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/boot/client/DetailsServiceClient.java diff --git a/spring-boot-client/src/main/java/org/baeldung/websocket/client/Message.java b/spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/websocket/client/Message.java similarity index 100% rename from spring-boot-client/src/main/java/org/baeldung/websocket/client/Message.java rename to spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/websocket/client/Message.java diff --git a/spring-boot-client/src/main/java/org/baeldung/websocket/client/MyStompSessionHandler.java b/spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/websocket/client/MyStompSessionHandler.java similarity index 100% rename from spring-boot-client/src/main/java/org/baeldung/websocket/client/MyStompSessionHandler.java rename to spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/websocket/client/MyStompSessionHandler.java diff --git a/spring-boot-client/src/main/java/org/baeldung/websocket/client/StompClient.java b/spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/websocket/client/StompClient.java similarity index 100% rename from spring-boot-client/src/main/java/org/baeldung/websocket/client/StompClient.java rename to spring-boot-modules/spring-boot-client/src/main/java/org/baeldung/websocket/client/StompClient.java diff --git a/spring-boot-client/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-client/src/main/resources/logback.xml similarity index 100% rename from spring-boot-client/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-client/src/main/resources/logback.xml diff --git a/spring-boot-client/src/test/java/com/baeldung/websocket/client/MyStompSessionHandlerIntegrationTest.java b/spring-boot-modules/spring-boot-client/src/test/java/com/baeldung/websocket/client/MyStompSessionHandlerIntegrationTest.java similarity index 100% rename from spring-boot-client/src/test/java/com/baeldung/websocket/client/MyStompSessionHandlerIntegrationTest.java rename to spring-boot-modules/spring-boot-client/src/test/java/com/baeldung/websocket/client/MyStompSessionHandlerIntegrationTest.java diff --git a/spring-boot-client/src/test/java/org/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-client/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-client/src/test/java/org/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-client/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-boot-client/src/test/java/org/baeldung/boot/client/DetailsServiceClientIntegrationTest.java b/spring-boot-modules/spring-boot-client/src/test/java/org/baeldung/boot/client/DetailsServiceClientIntegrationTest.java similarity index 100% rename from spring-boot-client/src/test/java/org/baeldung/boot/client/DetailsServiceClientIntegrationTest.java rename to spring-boot-modules/spring-boot-client/src/test/java/org/baeldung/boot/client/DetailsServiceClientIntegrationTest.java diff --git a/spring-boot-config-jpa-error/README.md b/spring-boot-modules/spring-boot-config-jpa-error/README.md similarity index 100% rename from spring-boot-config-jpa-error/README.md rename to spring-boot-modules/spring-boot-config-jpa-error/README.md diff --git a/spring-boot-config-jpa-error/data-jpa-application/README.md b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/README.md similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-application/README.md rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/README.md diff --git a/spring-boot-config-jpa-error/data-jpa-application/pom.xml b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/pom.xml similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-application/pom.xml rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/pom.xml diff --git a/spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/ApplicationFound.java b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/ApplicationFound.java similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/ApplicationFound.java rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/ApplicationFound.java diff --git a/spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/application/ApplicationNotFound.java b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/application/ApplicationNotFound.java similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/application/ApplicationNotFound.java rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/src/main/java/com/baeldung/data/jpa/application/ApplicationNotFound.java diff --git a/spring-boot-config-jpa-error/data-jpa-application/src/test/java/com/baeldung/data/jpa/DataJpaUnitTest.java b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/src/test/java/com/baeldung/data/jpa/DataJpaUnitTest.java similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-application/src/test/java/com/baeldung/data/jpa/DataJpaUnitTest.java rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-application/src/test/java/com/baeldung/data/jpa/DataJpaUnitTest.java diff --git a/spring-boot-config-jpa-error/data-jpa-library/README.md b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/README.md similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-library/README.md rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/README.md diff --git a/spring-boot-config-jpa-error/data-jpa-library/pom.xml b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/pom.xml similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-library/pom.xml rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/pom.xml diff --git a/spring-boot-config-jpa-error/data-jpa-library/src/main/java/com/baeldung/data/jpa/libarary/model/Example.java b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/src/main/java/com/baeldung/data/jpa/libarary/model/Example.java similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-library/src/main/java/com/baeldung/data/jpa/libarary/model/Example.java rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/src/main/java/com/baeldung/data/jpa/libarary/model/Example.java diff --git a/spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/TestApplication.java b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/TestApplication.java similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/TestApplication.java rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/TestApplication.java diff --git a/spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/libarary/DataJpaUnitTest.java b/spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/libarary/DataJpaUnitTest.java similarity index 100% rename from spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/libarary/DataJpaUnitTest.java rename to spring-boot-modules/spring-boot-config-jpa-error/data-jpa-library/src/test/java/com/baeldung/data/jpa/libarary/DataJpaUnitTest.java diff --git a/spring-boot-config-jpa-error/pom.xml b/spring-boot-modules/spring-boot-config-jpa-error/pom.xml similarity index 96% rename from spring-boot-config-jpa-error/pom.xml rename to spring-boot-modules/spring-boot-config-jpa-error/pom.xml index 4b99f9be93..f578957a1a 100644 --- a/spring-boot-config-jpa-error/pom.xml +++ b/spring-boot-modules/spring-boot-config-jpa-error/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2/pom.xml + ../../parent-boot-2/pom.xml diff --git a/spring-boot-deployment/README.md b/spring-boot-modules/spring-boot-deployment/README.md similarity index 100% rename from spring-boot-deployment/README.md rename to spring-boot-modules/spring-boot-deployment/README.md diff --git a/spring-boot-deployment/pom.xml b/spring-boot-modules/spring-boot-deployment/pom.xml similarity index 99% rename from spring-boot-deployment/pom.xml rename to spring-boot-modules/spring-boot-deployment/pom.xml index 6f724f312b..64c0e698f6 100644 --- a/spring-boot-deployment/pom.xml +++ b/spring-boot-modules/spring-boot-deployment/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-deployment/src/main/java/com/baeldung/compare/ComparisonApplication.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/compare/ComparisonApplication.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/compare/ComparisonApplication.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/compare/ComparisonApplication.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/compare/StartupEventHandler.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/compare/StartupEventHandler.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/compare/StartupEventHandler.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/compare/StartupEventHandler.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/GracefulShutdownApplication.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/beans/LongRunningProcessBean.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/gracefulshutdown/config/SpringConfiguration.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/SpringBootConfigurationApplication.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/SpringBootConfigurationApplication.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/SpringBootConfigurationApplication.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/SpringBootConfigurationApplication.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/controller/GreetingsController.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/controller/GreetingsController.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/controller/GreetingsController.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootconfiguration/controller/GreetingsController.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootnonwebapp/SpringBootConsoleApplication.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java diff --git a/spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/TomcatController.java b/spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/TomcatController.java similarity index 100% rename from spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/TomcatController.java rename to spring-boot-modules/spring-boot-deployment/src/main/java/com/baeldung/springbootsimple/TomcatController.java diff --git a/spring-boot-deployment/src/main/resources/application.properties b/spring-boot-modules/spring-boot-deployment/src/main/resources/application.properties similarity index 100% rename from spring-boot-deployment/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-deployment/src/main/resources/application.properties diff --git a/spring-boot-deployment/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-deployment/src/main/resources/logback.xml similarity index 100% rename from spring-boot-deployment/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-deployment/src/main/resources/logback.xml diff --git a/spring-boot-deployment/src/test/java/com/baeldung/springbootconfiguration/SpringContextTest.java b/spring-boot-modules/spring-boot-deployment/src/test/java/com/baeldung/springbootconfiguration/SpringContextTest.java similarity index 100% rename from spring-boot-deployment/src/test/java/com/baeldung/springbootconfiguration/SpringContextTest.java rename to spring-boot-modules/spring-boot-deployment/src/test/java/com/baeldung/springbootconfiguration/SpringContextTest.java diff --git a/spring-boot-deployment/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationIntegrationTest.java b/spring-boot-modules/spring-boot-deployment/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationIntegrationTest.java similarity index 100% rename from spring-boot-deployment/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot-deployment/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationIntegrationTest.java diff --git a/spring-boot-environment/README.md b/spring-boot-modules/spring-boot-environment/README.md similarity index 100% rename from spring-boot-environment/README.md rename to spring-boot-modules/spring-boot-environment/README.md diff --git a/spring-boot-environment/pom.xml b/spring-boot-modules/spring-boot-environment/pom.xml similarity index 98% rename from spring-boot-environment/pom.xml rename to spring-boot-modules/spring-boot-environment/pom.xml index 531ef697d7..138c59847d 100644 --- a/spring-boot-environment/pom.xml +++ b/spring-boot-modules/spring-boot-environment/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationApplication.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationApplication.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationApplication.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationApplication.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessor.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessor.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessor.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessor.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/autoconfig/PriceCalculationAutoConfig.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/autoconfig/PriceCalculationAutoConfig.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/autoconfig/PriceCalculationAutoConfig.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/autoconfig/PriceCalculationAutoConfig.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/GrossPriceCalculator.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/GrossPriceCalculator.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/GrossPriceCalculator.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/GrossPriceCalculator.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/NetPriceCalculator.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/NetPriceCalculator.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/NetPriceCalculator.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/NetPriceCalculator.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/PriceCalculator.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/PriceCalculator.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/PriceCalculator.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/calculator/PriceCalculator.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/service/PriceCalculationService.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/service/PriceCalculationService.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/service/PriceCalculationService.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/environmentpostprocessor/service/PriceCalculationService.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/properties/ConfProperties.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/properties/ConfProperties.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/properties/ConfProperties.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/properties/ConfProperties.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyConfigurer.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyConfigurer.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyConfigurer.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyConfigurer.java diff --git a/spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyFileLoader.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyFileLoader.java similarity index 100% rename from spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyFileLoader.java rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/properties/ExternalPropertyFileLoader.java diff --git a/spring-boot-environment/src/main/resources/META-INF/spring.factories b/spring-boot-modules/spring-boot-environment/src/main/resources/META-INF/spring.factories similarity index 100% rename from spring-boot-environment/src/main/resources/META-INF/spring.factories rename to spring-boot-modules/spring-boot-environment/src/main/resources/META-INF/spring.factories diff --git a/spring-boot-environment/src/main/resources/application.properties b/spring-boot-modules/spring-boot-environment/src/main/resources/application.properties similarity index 100% rename from spring-boot-environment/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-environment/src/main/resources/application.properties diff --git a/spring-boot-environment/src/main/resources/external/conf.properties b/spring-boot-modules/spring-boot-environment/src/main/resources/external/conf.properties similarity index 100% rename from spring-boot-environment/src/main/resources/external/conf.properties rename to spring-boot-modules/spring-boot-environment/src/main/resources/external/conf.properties diff --git a/spring-boot-environment/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-environment/src/main/resources/logback.xml similarity index 100% rename from spring-boot-environment/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-environment/src/main/resources/logback.xml diff --git a/spring-boot-environment/src/test/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessorLiveTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessorLiveTest.java similarity index 100% rename from spring-boot-environment/src/test/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessorLiveTest.java rename to spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/environmentpostprocessor/PriceCalculationEnvironmentPostProcessorLiveTest.java diff --git a/spring-boot-environment/src/test/java/com/baeldung/properties/ExternalPropertyFileLoaderIntegrationTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/properties/ExternalPropertyFileLoaderIntegrationTest.java similarity index 100% rename from spring-boot-environment/src/test/java/com/baeldung/properties/ExternalPropertyFileLoaderIntegrationTest.java rename to spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/properties/ExternalPropertyFileLoaderIntegrationTest.java diff --git a/spring-boot-flowable/README.md b/spring-boot-modules/spring-boot-flowable/README.md similarity index 100% rename from spring-boot-flowable/README.md rename to spring-boot-modules/spring-boot-flowable/README.md diff --git a/spring-boot-flowable/pom.xml b/spring-boot-modules/spring-boot-flowable/pom.xml similarity index 96% rename from spring-boot-flowable/pom.xml rename to spring-boot-modules/spring-boot-flowable/pom.xml index 96558b8595..7d9fb97cba 100644 --- a/spring-boot-flowable/pom.xml +++ b/spring-boot-modules/spring-boot-flowable/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-flowable/src/main/java/com/baeldung/Application.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/Application.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/Application.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/Application.java diff --git a/spring-boot-flowable/src/main/java/com/baeldung/controller/ArticleWorkflowController.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/controller/ArticleWorkflowController.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/controller/ArticleWorkflowController.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/controller/ArticleWorkflowController.java diff --git a/spring-boot-flowable/src/main/java/com/baeldung/domain/Approval.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/domain/Approval.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/domain/Approval.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/domain/Approval.java diff --git a/spring-boot-flowable/src/main/java/com/baeldung/domain/Article.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/domain/Article.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/domain/Article.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/domain/Article.java diff --git a/spring-boot-flowable/src/main/java/com/baeldung/service/ArticleWorkflowService.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/service/ArticleWorkflowService.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/service/ArticleWorkflowService.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/service/ArticleWorkflowService.java diff --git a/spring-boot-flowable/src/main/java/com/baeldung/service/PublishArticleService.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/service/PublishArticleService.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/service/PublishArticleService.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/service/PublishArticleService.java diff --git a/spring-boot-flowable/src/main/java/com/baeldung/service/SendMailService.java b/spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/service/SendMailService.java similarity index 100% rename from spring-boot-flowable/src/main/java/com/baeldung/service/SendMailService.java rename to spring-boot-modules/spring-boot-flowable/src/main/java/com/baeldung/service/SendMailService.java diff --git a/spring-boot-flowable/src/main/resources/application.properties b/spring-boot-modules/spring-boot-flowable/src/main/resources/application.properties similarity index 100% rename from spring-boot-flowable/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-flowable/src/main/resources/application.properties diff --git a/spring-boot-flowable/src/main/resources/processes/article-workflow.bpmn20.xml b/spring-boot-modules/spring-boot-flowable/src/main/resources/processes/article-workflow.bpmn20.xml similarity index 100% rename from spring-boot-flowable/src/main/resources/processes/article-workflow.bpmn20.xml rename to spring-boot-modules/spring-boot-flowable/src/main/resources/processes/article-workflow.bpmn20.xml diff --git a/spring-boot-flowable/src/test/java/com/baeldung/processes/ArticleWorkflowIntegrationTest.java b/spring-boot-modules/spring-boot-flowable/src/test/java/com/baeldung/processes/ArticleWorkflowIntegrationTest.java similarity index 100% rename from spring-boot-flowable/src/test/java/com/baeldung/processes/ArticleWorkflowIntegrationTest.java rename to spring-boot-modules/spring-boot-flowable/src/test/java/com/baeldung/processes/ArticleWorkflowIntegrationTest.java diff --git a/spring-boot-jasypt/.gitignore b/spring-boot-modules/spring-boot-jasypt/.gitignore similarity index 100% rename from spring-boot-jasypt/.gitignore rename to spring-boot-modules/spring-boot-jasypt/.gitignore diff --git a/spring-boot-jasypt/README.md b/spring-boot-modules/spring-boot-jasypt/README.md similarity index 100% rename from spring-boot-jasypt/README.md rename to spring-boot-modules/spring-boot-jasypt/README.md diff --git a/spring-boot-jasypt/pom.xml b/spring-boot-modules/spring-boot-jasypt/pom.xml similarity index 96% rename from spring-boot-jasypt/pom.xml rename to spring-boot-modules/spring-boot-jasypt/pom.xml index 76a501c455..e63a02729f 100644 --- a/spring-boot-jasypt/pom.xml +++ b/spring-boot-modules/spring-boot-jasypt/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/Main.java b/spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/Main.java similarity index 100% rename from spring-boot-jasypt/src/main/java/com/baeldung/jasypt/Main.java rename to spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/Main.java diff --git a/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/AppConfigForJasyptSimple.java b/spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/AppConfigForJasyptSimple.java similarity index 100% rename from spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/AppConfigForJasyptSimple.java rename to spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/AppConfigForJasyptSimple.java diff --git a/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/PropertyServiceForJasyptSimple.java b/spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/PropertyServiceForJasyptSimple.java similarity index 100% rename from spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/PropertyServiceForJasyptSimple.java rename to spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/simple/PropertyServiceForJasyptSimple.java diff --git a/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/AppConfigForJasyptStarter.java b/spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/AppConfigForJasyptStarter.java similarity index 100% rename from spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/AppConfigForJasyptStarter.java rename to spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/AppConfigForJasyptStarter.java diff --git a/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/PropertyServiceForJasyptStarter.java b/spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/PropertyServiceForJasyptStarter.java similarity index 100% rename from spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/PropertyServiceForJasyptStarter.java rename to spring-boot-modules/spring-boot-jasypt/src/main/java/com/baeldung/jasypt/starter/PropertyServiceForJasyptStarter.java diff --git a/spring-boot-jasypt/src/main/resources/application.properties b/spring-boot-modules/spring-boot-jasypt/src/main/resources/application.properties similarity index 100% rename from spring-boot-jasypt/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-jasypt/src/main/resources/application.properties diff --git a/spring-boot-jasypt/src/main/resources/encrypted.properties b/spring-boot-modules/spring-boot-jasypt/src/main/resources/encrypted.properties similarity index 100% rename from spring-boot-jasypt/src/main/resources/encrypted.properties rename to spring-boot-modules/spring-boot-jasypt/src/main/resources/encrypted.properties diff --git a/spring-boot-jasypt/src/main/resources/encryptedv2.properties b/spring-boot-modules/spring-boot-jasypt/src/main/resources/encryptedv2.properties similarity index 100% rename from spring-boot-jasypt/src/main/resources/encryptedv2.properties rename to spring-boot-modules/spring-boot-jasypt/src/main/resources/encryptedv2.properties diff --git a/spring-boot-jasypt/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-jasypt/src/main/resources/logback.xml similarity index 100% rename from spring-boot-jasypt/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-jasypt/src/main/resources/logback.xml diff --git a/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/CustomJasyptIntegrationTest.java b/spring-boot-modules/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/CustomJasyptIntegrationTest.java similarity index 100% rename from spring-boot-jasypt/src/test/java/com/baeldung/jasypt/CustomJasyptIntegrationTest.java rename to spring-boot-modules/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/CustomJasyptIntegrationTest.java diff --git a/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptSimpleIntegrationTest.java b/spring-boot-modules/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptSimpleIntegrationTest.java similarity index 100% rename from spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptSimpleIntegrationTest.java rename to spring-boot-modules/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptSimpleIntegrationTest.java diff --git a/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptWithStarterIntegrationTest.java b/spring-boot-modules/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptWithStarterIntegrationTest.java similarity index 100% rename from spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptWithStarterIntegrationTest.java rename to spring-boot-modules/spring-boot-jasypt/src/test/java/com/baeldung/jasypt/JasyptWithStarterIntegrationTest.java diff --git a/spring-boot-jasypt/src/test/java/org/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-jasypt/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-jasypt/src/test/java/org/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-jasypt/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-boot-libraries/.gitignore b/spring-boot-modules/spring-boot-libraries/.gitignore similarity index 100% rename from spring-boot-libraries/.gitignore rename to spring-boot-modules/spring-boot-libraries/.gitignore diff --git a/spring-boot-libraries/README.md b/spring-boot-modules/spring-boot-libraries/README.md similarity index 100% rename from spring-boot-libraries/README.md rename to spring-boot-modules/spring-boot-libraries/README.md diff --git a/spring-boot-libraries/mvnw b/spring-boot-modules/spring-boot-libraries/mvnw similarity index 100% rename from spring-boot-libraries/mvnw rename to spring-boot-modules/spring-boot-libraries/mvnw diff --git a/spring-boot-libraries/mvnw.cmd b/spring-boot-modules/spring-boot-libraries/mvnw.cmd similarity index 100% rename from spring-boot-libraries/mvnw.cmd rename to spring-boot-modules/spring-boot-libraries/mvnw.cmd diff --git a/spring-boot-libraries/pom.xml b/spring-boot-modules/spring-boot-libraries/pom.xml similarity index 99% rename from spring-boot-libraries/pom.xml rename to spring-boot-modules/spring-boot-libraries/pom.xml index d9c9073542..ba1164dd59 100644 --- a/spring-boot-libraries/pom.xml +++ b/spring-boot-modules/spring-boot-libraries/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/SpringProblemApplication.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/ExceptionHandler.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/advice/SecurityExceptionHandler.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/ProblemDemoConfiguration.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/configuration/SecurityConfiguration.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/controller/ProblemDemoController.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/dto/Task.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/dto/Task.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/dto/Task.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/dto/Task.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/problem/problems/TaskNotFoundProblem.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java diff --git a/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java similarity index 100% rename from spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java diff --git a/spring-boot-libraries/src/main/resources/application-problem.properties b/spring-boot-modules/spring-boot-libraries/src/main/resources/application-problem.properties similarity index 100% rename from spring-boot-libraries/src/main/resources/application-problem.properties rename to spring-boot-modules/spring-boot-libraries/src/main/resources/application-problem.properties diff --git a/spring-boot-libraries/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java similarity index 100% rename from spring-boot-libraries/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java rename to spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/boot/problem/controller/ProblemDemoControllerIntegrationTest.java diff --git a/spring-boot-mvc-2/.gitignore b/spring-boot-modules/spring-boot-mvc-2/.gitignore similarity index 100% rename from spring-boot-mvc-2/.gitignore rename to spring-boot-modules/spring-boot-mvc-2/.gitignore diff --git a/spring-boot-mvc-2/README.md b/spring-boot-modules/spring-boot-mvc-2/README.md similarity index 100% rename from spring-boot-mvc-2/README.md rename to spring-boot-modules/spring-boot-mvc-2/README.md diff --git a/spring-boot-mvc-2/pom.xml b/spring-boot-modules/spring-boot-mvc-2/pom.xml similarity index 98% rename from spring-boot-mvc-2/pom.xml rename to spring-boot-modules/spring-boot-mvc-2/pom.xml index 654b67d0f5..edebd41986 100644 --- a/spring-boot-mvc-2/pom.xml +++ b/spring-boot-modules/spring-boot-mvc-2/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/SpringBootMvcFnApplication.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/SpringBootMvcFnApplication.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/SpringBootMvcFnApplication.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/SpringBootMvcFnApplication.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/ctrl/ProductController.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/ctrl/ProductController.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/ctrl/ProductController.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/ctrl/ProductController.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/model/Product.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/model/Product.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/model/Product.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/model/Product.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/svc/ProductService.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/svc/ProductService.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/svc/ProductService.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/springbootmvc/svc/ProductService.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/SpringBootSwaggerApplication.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/SpringBootSwaggerApplication.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/SpringBootSwaggerApplication.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/SpringBootSwaggerApplication.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/config/Swagger2Config.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/config/Swagger2Config.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/config/Swagger2Config.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/config/Swagger2Config.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/controller/FooController.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/controller/FooController.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/controller/FooController.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/controller/FooController.java diff --git a/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/model/Foo.java b/spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/model/Foo.java similarity index 100% rename from spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/model/Foo.java rename to spring-boot-modules/spring-boot-mvc-2/src/main/java/com/baeldung/swagger2boot/model/Foo.java diff --git a/spring-boot-mvc-2/src/main/resources/application.properties b/spring-boot-modules/spring-boot-mvc-2/src/main/resources/application.properties similarity index 100% rename from spring-boot-mvc-2/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-mvc-2/src/main/resources/application.properties diff --git a/spring-boot-mvc-2/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-mvc-2/src/main/resources/logback.xml similarity index 100% rename from spring-boot-mvc-2/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-mvc-2/src/main/resources/logback.xml diff --git a/spring-boot-mvc-2/src/main/resources/swagger-description.yml b/spring-boot-modules/spring-boot-mvc-2/src/main/resources/swagger-description.yml similarity index 100% rename from spring-boot-mvc-2/src/main/resources/swagger-description.yml rename to spring-boot-modules/spring-boot-mvc-2/src/main/resources/swagger-description.yml diff --git a/spring-boot-mvc/.gitignore b/spring-boot-modules/spring-boot-mvc/.gitignore similarity index 100% rename from spring-boot-mvc/.gitignore rename to spring-boot-modules/spring-boot-mvc/.gitignore diff --git a/spring-boot-mvc/README.md b/spring-boot-modules/spring-boot-mvc/README.md similarity index 100% rename from spring-boot-mvc/README.md rename to spring-boot-modules/spring-boot-mvc/README.md diff --git a/spring-boot-mvc/pom.xml b/spring-boot-modules/spring-boot-mvc/pom.xml similarity index 98% rename from spring-boot-mvc/pom.xml rename to spring-boot-modules/spring-boot-mvc/pom.xml index 06400a3502..6a951ace93 100644 --- a/spring-boot-mvc/pom.xml +++ b/spring-boot-modules/spring-boot-mvc/pom.xml @@ -12,7 +12,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/App.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/App.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/App.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/App.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/Bike.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Bike.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/Bike.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Bike.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/Biker.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Biker.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/Biker.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Biker.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/Car.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Car.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/Car.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Car.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarMechanic.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarMechanic.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/CarMechanic.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarMechanic.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarUtility.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarUtility.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/CarUtility.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarUtility.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/CustomException.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CustomException.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/CustomException.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CustomException.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/Driver.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Driver.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/Driver.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Driver.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/Engine.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Engine.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/Engine.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Engine.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/Vehicle.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Vehicle.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/Vehicle.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Vehicle.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRepository.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRepository.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRepository.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRepository.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRestController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRestController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRestController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRestController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleService.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleService.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleService.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleService.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanA.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanA.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanA.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanA.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java similarity index 93% rename from spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java index f0cc263504..9fc228b201 100644 --- a/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java +++ b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/BeanB.java @@ -1,5 +1,5 @@ -package com.baeldung.nosuchbeandefinitionexception; - -public class BeanB { - -} +package com.baeldung.nosuchbeandefinitionexception; + +public class BeanB { + +} diff --git a/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/NoSuchBeanDefinitionDemoApp.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/NoSuchBeanDefinitionDemoApp.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/NoSuchBeanDefinitionDemoApp.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/nosuchbeandefinitionexception/NoSuchBeanDefinitionDemoApp.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseWithBuilderController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseWithBuilderController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseWithBuilderController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/responseentity/CustomResponseWithBuilderController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedApplication.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedApplication.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedApplication.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedApplication.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedView.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedView.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedView.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/rss/RssFeedView.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootannotations/MySQLAutoconfiguration.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootannotations/MySQLAutoconfiguration.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootannotations/MySQLAutoconfiguration.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootannotations/MySQLAutoconfiguration.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoggingController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoginController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoginController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoginController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/LoginController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/SpringBootMvcApplication.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/SpringBootMvcApplication.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/SpringBootMvcApplication.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/SpringBootMvcApplication.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/CustomMessageSourceConfiguration.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/CustomMessageSourceConfiguration.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/CustomMessageSourceConfiguration.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/CustomMessageSourceConfiguration.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/FaviconConfiguration.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/FaviconConfiguration.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/FaviconConfiguration.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/config/FaviconConfiguration.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/JsfApplication.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/JsfApplication.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/JsfApplication.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/JsfApplication.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/controller/JsfController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/controller/JsfController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/controller/JsfController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/controller/JsfController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Dao.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Dao.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Dao.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Dao.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Todo.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Todo.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Todo.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/Todo.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/TodoDao.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/TodoDao.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/TodoDao.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/model/TodoDao.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/service/TodoService.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/service/TodoService.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/service/TodoService.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/jsfapplication/service/TodoService.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/model/LoginForm.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/model/LoginForm.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/model/LoginForm.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/springbootmvc/model/LoginForm.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java b/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java similarity index 100% rename from spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java rename to spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java diff --git a/spring-boot-mvc/src/main/resources/application.properties b/spring-boot-modules/spring-boot-mvc/src/main/resources/application.properties similarity index 100% rename from spring-boot-mvc/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-mvc/src/main/resources/application.properties diff --git a/spring-boot-mvc/src/main/resources/com/baeldung/images/favicon.ico b/spring-boot-modules/spring-boot-mvc/src/main/resources/com/baeldung/images/favicon.ico similarity index 100% rename from spring-boot-mvc/src/main/resources/com/baeldung/images/favicon.ico rename to spring-boot-modules/spring-boot-mvc/src/main/resources/com/baeldung/images/favicon.ico diff --git a/spring-boot-mvc/src/main/resources/favicon.ico b/spring-boot-modules/spring-boot-mvc/src/main/resources/favicon.ico similarity index 100% rename from spring-boot-mvc/src/main/resources/favicon.ico rename to spring-boot-modules/spring-boot-mvc/src/main/resources/favicon.ico diff --git a/spring-boot-mvc/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-mvc/src/main/resources/logback.xml similarity index 100% rename from spring-boot-mvc/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-mvc/src/main/resources/logback.xml diff --git a/spring-boot-mvc/src/main/resources/messages.properties b/spring-boot-modules/spring-boot-mvc/src/main/resources/messages.properties similarity index 100% rename from spring-boot-mvc/src/main/resources/messages.properties rename to spring-boot-modules/spring-boot-mvc/src/main/resources/messages.properties diff --git a/spring-boot-mvc/src/main/resources/messages_fr.properties b/spring-boot-modules/spring-boot-mvc/src/main/resources/messages_fr.properties similarity index 100% rename from spring-boot-mvc/src/main/resources/messages_fr.properties rename to spring-boot-modules/spring-boot-mvc/src/main/resources/messages_fr.properties diff --git a/spring-boot-mvc/src/main/resources/mysql.properties b/spring-boot-modules/spring-boot-mvc/src/main/resources/mysql.properties similarity index 100% rename from spring-boot-mvc/src/main/resources/mysql.properties rename to spring-boot-modules/spring-boot-mvc/src/main/resources/mysql.properties diff --git a/spring-boot-mvc/src/main/resources/static/favicon.ico b/spring-boot-modules/spring-boot-mvc/src/main/resources/static/favicon.ico similarity index 100% rename from spring-boot-mvc/src/main/resources/static/favicon.ico rename to spring-boot-modules/spring-boot-mvc/src/main/resources/static/favicon.ico diff --git a/spring-boot-mvc/src/main/resources/static/index.html b/spring-boot-modules/spring-boot-mvc/src/main/resources/static/index.html similarity index 100% rename from spring-boot-mvc/src/main/resources/static/index.html rename to spring-boot-modules/spring-boot-mvc/src/main/resources/static/index.html diff --git a/spring-boot-mvc/src/main/resources/templates/thymeleaf/index.html b/spring-boot-modules/spring-boot-mvc/src/main/resources/templates/thymeleaf/index.html similarity index 100% rename from spring-boot-mvc/src/main/resources/templates/thymeleaf/index.html rename to spring-boot-modules/spring-boot-mvc/src/main/resources/templates/thymeleaf/index.html diff --git a/spring-boot-mvc/src/main/webapp/WEB-INF/faces-config.xml b/spring-boot-modules/spring-boot-mvc/src/main/webapp/WEB-INF/faces-config.xml similarity index 100% rename from spring-boot-mvc/src/main/webapp/WEB-INF/faces-config.xml rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/WEB-INF/faces-config.xml diff --git a/spring-boot-mvc/src/main/webapp/WEB-INF/web.xml b/spring-boot-modules/spring-boot-mvc/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from spring-boot-mvc/src/main/webapp/WEB-INF/web.xml rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/WEB-INF/web.xml diff --git a/spring-boot-mvc/src/main/webapp/index.xhtml b/spring-boot-modules/spring-boot-mvc/src/main/webapp/index.xhtml similarity index 100% rename from spring-boot-mvc/src/main/webapp/index.xhtml rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/index.xhtml diff --git a/spring-boot-mvc/src/main/webapp/js/jquery.js b/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/jquery.js similarity index 100% rename from spring-boot-mvc/src/main/webapp/js/jquery.js rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/js/jquery.js diff --git a/spring-boot-mvc/src/main/webapp/js/script-async-jquery.js b/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async-jquery.js similarity index 100% rename from spring-boot-mvc/src/main/webapp/js/script-async-jquery.js rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async-jquery.js diff --git a/spring-boot-mvc/src/main/webapp/js/script-async.js b/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async.js similarity index 100% rename from spring-boot-mvc/src/main/webapp/js/script-async.js rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async.js diff --git a/spring-boot-mvc/src/main/webapp/js/script.js b/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script.js similarity index 100% rename from spring-boot-mvc/src/main/webapp/js/script.js rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script.js diff --git a/spring-boot-mvc/src/main/webapp/todo.xhtml b/spring-boot-modules/spring-boot-mvc/src/main/webapp/todo.xhtml similarity index 100% rename from spring-boot-mvc/src/main/webapp/todo.xhtml rename to spring-boot-modules/spring-boot-mvc/src/main/webapp/todo.xhtml diff --git a/spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java b/spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java similarity index 100% rename from spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java rename to spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java diff --git a/spring-boot-mvc/src/test/java/com/baeldung/rss/RssFeedUnitTest.java b/spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/rss/RssFeedUnitTest.java similarity index 100% rename from spring-boot-mvc/src/test/java/com/baeldung/rss/RssFeedUnitTest.java rename to spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/rss/RssFeedUnitTest.java diff --git a/spring-boot-mvc/src/test/java/com/baeldung/springbootmvc/LoginControllerUnitTest.java b/spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/springbootmvc/LoginControllerUnitTest.java similarity index 100% rename from spring-boot-mvc/src/test/java/com/baeldung/springbootmvc/LoginControllerUnitTest.java rename to spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/springbootmvc/LoginControllerUnitTest.java diff --git a/spring-boot-mvc/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-boot-modules/spring-boot-mvc/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-boot-mvc/src/test/java/org/baeldung/SpringContextLiveTest.java rename to spring-boot-modules/spring-boot-mvc/src/test/java/org/baeldung/SpringContextLiveTest.java diff --git a/spring-boot-mvc/src/test/java/org/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-mvc/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-mvc/src/test/java/org/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-mvc/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-boot-property-exp/README.md b/spring-boot-modules/spring-boot-property-exp/README.md similarity index 100% rename from spring-boot-property-exp/README.md rename to spring-boot-modules/spring-boot-property-exp/README.md diff --git a/spring-boot-property-exp/pom.xml b/spring-boot-modules/spring-boot-property-exp/pom.xml similarity index 100% rename from spring-boot-property-exp/pom.xml rename to spring-boot-modules/spring-boot-property-exp/pom.xml diff --git a/spring-boot-property-exp/property-exp-custom-config/pom.xml b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/pom.xml similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/pom.xml rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/pom.xml diff --git a/spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java diff --git a/spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java diff --git a/spring-boot-property-exp/property-exp-custom-config/src/main/resources/application.properties b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/resources/application.properties similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/resources/application.properties diff --git a/spring-boot-property-exp/property-exp-custom-config/src/main/resources/banner.txt b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/resources/banner.txt similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/src/main/resources/banner.txt rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/resources/banner.txt diff --git a/spring-boot-property-exp/property-exp-custom-config/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/resources/logback.xml similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/main/resources/logback.xml diff --git a/spring-boot-property-exp/property-exp-custom-config/src/test/java/org/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-property-exp/property-exp-custom-config/src/test/java/org/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-boot-property-exp/property-exp-default-config/build.gradle b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/build.gradle similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/build.gradle rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/build.gradle diff --git a/spring-boot-property-exp/property-exp-default-config/gradle.properties b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/gradle.properties similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/gradle.properties rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/gradle.properties diff --git a/spring-boot-property-exp/property-exp-default-config/pom.xml b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/pom.xml similarity index 95% rename from spring-boot-property-exp/property-exp-default-config/pom.xml rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/pom.xml index 9cb1de33f6..aa5b8ef34a 100644 --- a/spring-boot-property-exp/property-exp-default-config/pom.xml +++ b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-boot-1 0.0.1-SNAPSHOT - ../../parent-boot-1 + ../../../parent-boot-1 diff --git a/spring-boot-property-exp/property-exp-default-config/settings.gradle b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/settings.gradle similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/settings.gradle rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/settings.gradle diff --git a/spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/SpringBootPropertyExpansionApp.java diff --git a/spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/java/com/baeldung/propertyexpansion/components/PropertyLoggerBean.java diff --git a/spring-boot-property-exp/property-exp-default-config/src/main/resources/application.properties b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/resources/application.properties similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/resources/application.properties diff --git a/spring-boot-property-exp/property-exp-default-config/src/main/resources/banner.txt b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/resources/banner.txt similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/src/main/resources/banner.txt rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/resources/banner.txt diff --git a/spring-boot-property-exp/property-exp-default-config/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/resources/logback.xml similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/main/resources/logback.xml diff --git a/spring-boot-property-exp/property-exp-default-config/src/test/java/org/baeldung/SpringContextTest.java b/spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-boot-property-exp/property-exp-default-config/src/test/java/org/baeldung/SpringContextTest.java rename to spring-boot-modules/spring-boot-property-exp/property-exp-default-config/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-boot-runtime/README.md b/spring-boot-modules/spring-boot-runtime/README.md similarity index 100% rename from spring-boot-runtime/README.md rename to spring-boot-modules/spring-boot-runtime/README.md diff --git a/spring-boot-runtime/disabling-console-jul/.gitignore b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/.gitignore similarity index 100% rename from spring-boot-runtime/disabling-console-jul/.gitignore rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/.gitignore diff --git a/spring-boot-runtime/disabling-console-jul/README.md b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/README.md similarity index 100% rename from spring-boot-runtime/disabling-console-jul/README.md rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/README.md diff --git a/spring-boot-runtime/disabling-console-jul/pom.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/pom.xml similarity index 100% rename from spring-boot-runtime/disabling-console-jul/pom.xml rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/pom.xml diff --git a/spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/DisablingConsoleJulApp.java b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/DisablingConsoleJulApp.java similarity index 100% rename from spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/DisablingConsoleJulApp.java rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/DisablingConsoleJulApp.java diff --git a/spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/controllers/DisabledConsoleRestController.java b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/controllers/DisabledConsoleRestController.java similarity index 100% rename from spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/controllers/DisabledConsoleRestController.java rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/java/com/baeldung/springbootlogging/disablingconsole/jul/properties/controllers/DisabledConsoleRestController.java diff --git a/spring-boot-runtime/disabling-console-jul/src/main/resources/application.properties b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/resources/application.properties similarity index 100% rename from spring-boot-runtime/disabling-console-jul/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/resources/application.properties diff --git a/spring-boot-runtime/disabling-console-jul/src/main/resources/logging.properties b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/resources/logging.properties similarity index 100% rename from spring-boot-runtime/disabling-console-jul/src/main/resources/logging.properties rename to spring-boot-modules/spring-boot-runtime/disabling-console-jul/src/main/resources/logging.properties diff --git a/spring-boot-runtime/disabling-console-log4j2/.gitignore b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/.gitignore similarity index 100% rename from spring-boot-runtime/disabling-console-log4j2/.gitignore rename to spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/.gitignore diff --git a/spring-boot-runtime/disabling-console-log4j2/README.md b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/README.md similarity index 100% rename from spring-boot-runtime/disabling-console-log4j2/README.md rename to spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/README.md diff --git a/spring-boot-runtime/disabling-console-log4j2/pom.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/pom.xml similarity index 100% rename from spring-boot-runtime/disabling-console-log4j2/pom.xml rename to spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/pom.xml diff --git a/spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/DisablingConsoleLog4j2App.java b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/DisablingConsoleLog4j2App.java similarity index 100% rename from spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/DisablingConsoleLog4j2App.java rename to spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/DisablingConsoleLog4j2App.java diff --git a/spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/controllers/DisabledConsoleRestController.java b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/controllers/DisabledConsoleRestController.java similarity index 100% rename from spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/controllers/DisabledConsoleRestController.java rename to spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/src/main/java/com/baeldung/springbootlogging/disablingconsole/log4j2/xml/controllers/DisabledConsoleRestController.java diff --git a/spring-boot-runtime/disabling-console-log4j2/src/main/resources/log4j2.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/src/main/resources/log4j2.xml similarity index 100% rename from spring-boot-runtime/disabling-console-log4j2/src/main/resources/log4j2.xml rename to spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/src/main/resources/log4j2.xml diff --git a/spring-boot-runtime/disabling-console-logback/.gitignore b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/.gitignore similarity index 100% rename from spring-boot-runtime/disabling-console-logback/.gitignore rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/.gitignore diff --git a/spring-boot-runtime/disabling-console-logback/README.md b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/README.md similarity index 100% rename from spring-boot-runtime/disabling-console-logback/README.md rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/README.md diff --git a/spring-boot-runtime/disabling-console-logback/pom.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/pom.xml similarity index 100% rename from spring-boot-runtime/disabling-console-logback/pom.xml rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/pom.xml diff --git a/spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/DisablingConsoleLogbackApp.java b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/DisablingConsoleLogbackApp.java similarity index 100% rename from spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/DisablingConsoleLogbackApp.java rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/DisablingConsoleLogbackApp.java diff --git a/spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/controllers/DisabledConsoleRestController.java b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/controllers/DisabledConsoleRestController.java similarity index 100% rename from spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/controllers/DisabledConsoleRestController.java rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/java/com/baeldung/springbootlogging/disablingconsole/logback/xml/controllers/DisabledConsoleRestController.java diff --git a/spring-boot-runtime/disabling-console-logback/src/main/resources/application.properties b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/resources/application.properties similarity index 100% rename from spring-boot-runtime/disabling-console-logback/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/resources/application.properties diff --git a/spring-boot-runtime/disabling-console-logback/src/main/resources/logback-spring.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/resources/logback-spring.xml similarity index 100% rename from spring-boot-runtime/disabling-console-logback/src/main/resources/logback-spring.xml rename to spring-boot-modules/spring-boot-runtime/disabling-console-logback/src/main/resources/logback-spring.xml diff --git a/spring-boot-runtime/docker/Dockerfile b/spring-boot-modules/spring-boot-runtime/docker/Dockerfile similarity index 100% rename from spring-boot-runtime/docker/Dockerfile rename to spring-boot-modules/spring-boot-runtime/docker/Dockerfile diff --git a/spring-boot-runtime/docker/logback.xml b/spring-boot-modules/spring-boot-runtime/docker/logback.xml similarity index 100% rename from spring-boot-runtime/docker/logback.xml rename to spring-boot-modules/spring-boot-runtime/docker/logback.xml diff --git a/spring-boot-runtime/docker/run.sh b/spring-boot-modules/spring-boot-runtime/docker/run.sh similarity index 100% rename from spring-boot-runtime/docker/run.sh rename to spring-boot-modules/spring-boot-runtime/docker/run.sh diff --git a/spring-boot-runtime/pom.xml b/spring-boot-modules/spring-boot-runtime/pom.xml similarity index 96% rename from spring-boot-runtime/pom.xml rename to spring-boot-modules/spring-boot-runtime/pom.xml index fa03ab78d4..df45537940 100644 --- a/spring-boot-runtime/pom.xml +++ b/spring-boot-modules/spring-boot-runtime/pom.xml @@ -11,9 +11,15 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 + + disabling-console-jul + disabling-console-log4j2 + disabling-console-logback + + diff --git a/spring-boot-runtime/src/main/java/com/baeldung/changeport/CustomApplication.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/changeport/CustomApplication.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/changeport/CustomApplication.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/changeport/CustomApplication.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/cors/Account.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/cors/Account.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/cors/Account.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/cors/Account.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/cors/AccountController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/cors/AccountController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/cors/AccountController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/cors/AccountController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/restart/Application.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/restart/Application.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/restart/Application.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/restart/Application.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/restart/RestartController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/restart/RestartController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/restart/RestartController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/restart/RestartController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/restart/RestartService.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/restart/RestartService.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/restart/RestartService.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/restart/RestartService.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MainApplication.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MainApplication.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MainApplication.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/MainApplication.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/RestClientConfig.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/WebConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/WebConfig.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/WebConfig.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/config/WebConfig.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/interceptors/RestTemplateHeaderModifierInterceptor.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/repository/HeavyResourceRepository.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/BarMappingExamplesController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/CompanyController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/DeferredResultController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/HeavyResourceController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/ItemController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/MyFooController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/SimplePostController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/mediatypes/CustomMediaTypeController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/controller/redirect/RedirectController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItem.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/BaeldungItemV2.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Company.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Company.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Company.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Company.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Foo.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResource.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressOnly.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/HeavyResourceAddressPartialUpdate.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Item.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Item.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Item.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Item.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/ItemManager.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Views.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Views.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Views.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/dto/Views.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/sampleapp/web/exception/ResourceNotFoundException.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/shutdown/Application.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/Application.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/shutdown/Application.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/Application.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/shutdown/ShutdownConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/ShutdownConfig.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/shutdown/ShutdownConfig.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/ShutdownConfig.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/shutdown/TerminateBean.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/TerminateBean.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/shutdown/TerminateBean.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/TerminateBean.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/shutdown/shutdown/ShutdownController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/shutdown/ShutdownController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/shutdown/shutdown/ShutdownController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/shutdown/shutdown/ShutdownController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingApplication.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/LoggingController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/logging/SecurityConfig.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/App.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/App.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/App.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/App.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/app/Application.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/app/Application.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/app/Application.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/app/Application.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/app/TaxiFareRequestInterceptor.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/CustomeRequestLoggingFilter.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/RequestLoggingFilterConfig.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/config/TaxiFareMVCConfig.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/controller/TaxiFareController.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/data/RateCard.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/data/RateCard.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/data/RateCard.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/data/RateCard.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/data/TaxiRide.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/data/TaxiRide.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/data/TaxiRide.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/data/TaxiRide.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/service/TaxiFareCalculatorService.java diff --git a/spring-boot-runtime/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java b/spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java similarity index 100% rename from spring-boot-runtime/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java rename to spring-boot-modules/spring-boot-runtime/src/main/java/com/baeldung/web/log/util/RequestLoggingUtil.java diff --git a/spring-boot-runtime/src/main/resources/application-log.properties b/spring-boot-modules/spring-boot-runtime/src/main/resources/application-log.properties similarity index 100% rename from spring-boot-runtime/src/main/resources/application-log.properties rename to spring-boot-modules/spring-boot-runtime/src/main/resources/application-log.properties diff --git a/spring-boot-runtime/src/main/resources/application-logging.properties b/spring-boot-modules/spring-boot-runtime/src/main/resources/application-logging.properties similarity index 100% rename from spring-boot-runtime/src/main/resources/application-logging.properties rename to spring-boot-modules/spring-boot-runtime/src/main/resources/application-logging.properties diff --git a/spring-boot-runtime/src/main/resources/application-tomcat.properties b/spring-boot-modules/spring-boot-runtime/src/main/resources/application-tomcat.properties similarity index 100% rename from spring-boot-runtime/src/main/resources/application-tomcat.properties rename to spring-boot-modules/spring-boot-runtime/src/main/resources/application-tomcat.properties diff --git a/spring-boot-runtime/src/main/resources/application.properties b/spring-boot-modules/spring-boot-runtime/src/main/resources/application.properties similarity index 100% rename from spring-boot-runtime/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-runtime/src/main/resources/application.properties diff --git a/spring-boot-runtime/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-runtime/src/main/resources/logback.xml similarity index 100% rename from spring-boot-runtime/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-runtime/src/main/resources/logback.xml diff --git a/spring-boot-runtime/src/main/webapp/WEB-INF/api-servlet.xml b/spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/api-servlet.xml similarity index 100% rename from spring-boot-runtime/src/main/webapp/WEB-INF/api-servlet.xml rename to spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/api-servlet.xml diff --git a/spring-boot-runtime/src/main/webapp/WEB-INF/company.html b/spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/company.html similarity index 100% rename from spring-boot-runtime/src/main/webapp/WEB-INF/company.html rename to spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/company.html diff --git a/spring-boot-runtime/src/main/webapp/WEB-INF/spring-views.xml b/spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/spring-views.xml similarity index 100% rename from spring-boot-runtime/src/main/webapp/WEB-INF/spring-views.xml rename to spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/spring-views.xml diff --git a/spring-boot-runtime/src/main/webapp/WEB-INF/web.xml b/spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from spring-boot-runtime/src/main/webapp/WEB-INF/web.xml rename to spring-boot-modules/spring-boot-runtime/src/main/webapp/WEB-INF/web.xml diff --git a/spring-boot-runtime/src/test/java/com/baeldung/restart/RestartApplicationManualTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/restart/RestartApplicationManualTest.java similarity index 100% rename from spring-boot-runtime/src/test/java/com/baeldung/restart/RestartApplicationManualTest.java rename to spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/restart/RestartApplicationManualTest.java diff --git a/spring-boot-runtime/src/test/java/com/baeldung/shutdown/ShutdownApplicationIntegrationTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/shutdown/ShutdownApplicationIntegrationTest.java similarity index 100% rename from spring-boot-runtime/src/test/java/com/baeldung/shutdown/ShutdownApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/shutdown/ShutdownApplicationIntegrationTest.java diff --git a/spring-boot-runtime/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java similarity index 100% rename from spring-boot-runtime/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java rename to spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/HeavyResourceControllerIntegrationTest.java diff --git a/spring-boot-runtime/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java b/spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java similarity index 100% rename from spring-boot-runtime/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java rename to spring-boot-modules/spring-boot-runtime/src/test/java/com/baeldung/web/controller/TaxiFareControllerIntegrationTest.java diff --git a/spring-boot-runtime/src/test/resources/application-integrationtest.properties b/spring-boot-modules/spring-boot-runtime/src/test/resources/application-integrationtest.properties similarity index 100% rename from spring-boot-runtime/src/test/resources/application-integrationtest.properties rename to spring-boot-modules/spring-boot-runtime/src/test/resources/application-integrationtest.properties diff --git a/spring-boot-runtime/src/test/resources/application.properties b/spring-boot-modules/spring-boot-runtime/src/test/resources/application.properties similarity index 100% rename from spring-boot-runtime/src/test/resources/application.properties rename to spring-boot-modules/spring-boot-runtime/src/test/resources/application.properties diff --git a/spring-boot/.gitignore b/spring-boot-modules/spring-boot/.gitignore similarity index 89% rename from spring-boot/.gitignore rename to spring-boot-modules/spring-boot/.gitignore index 88e3308e9d..da7c2c5c0a 100644 --- a/spring-boot/.gitignore +++ b/spring-boot-modules/spring-boot/.gitignore @@ -1,5 +1,5 @@ -/target/ -.settings/ -.classpath -.project - +/target/ +.settings/ +.classpath +.project + diff --git a/spring-boot/.mvn/wrapper/maven-wrapper.properties b/spring-boot-modules/spring-boot/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from spring-boot/.mvn/wrapper/maven-wrapper.properties rename to spring-boot-modules/spring-boot/.mvn/wrapper/maven-wrapper.properties diff --git a/spring-boot/README.MD b/spring-boot-modules/spring-boot/README.MD similarity index 100% rename from spring-boot/README.MD rename to spring-boot-modules/spring-boot/README.MD diff --git a/spring-boot/mvnw b/spring-boot-modules/spring-boot/mvnw similarity index 100% rename from spring-boot/mvnw rename to spring-boot-modules/spring-boot/mvnw diff --git a/spring-boot/mvnw.cmd b/spring-boot-modules/spring-boot/mvnw.cmd similarity index 97% rename from spring-boot/mvnw.cmd rename to spring-boot-modules/spring-boot/mvnw.cmd index 4f0b068a03..6a6eec39ba 100755 --- a/spring-boot/mvnw.cmd +++ b/spring-boot-modules/spring-boot/mvnw.cmd @@ -1,145 +1,145 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/spring-boot/pom.xml b/spring-boot-modules/spring-boot/pom.xml similarity index 96% rename from spring-boot/pom.xml rename to spring-boot-modules/spring-boot/pom.xml index b8ebd27e13..3fb1ec9acc 100644 --- a/spring-boot/pom.xml +++ b/spring-boot-modules/spring-boot/pom.xml @@ -1,268 +1,268 @@ - - - 4.0.0 - spring-boot - spring-boot - war - This is simple boot application for Spring boot actuator test - 0.0.1-SNAPSHOT - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../parent-boot-2 - - - - - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - - - org.junit.platform - junit-platform-launcher - ${junit-platform.version} - test - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.ehcache - ehcache - - - org.hibernate - hibernate-ehcache - - - org.springframework.boot - spring-boot-starter-actuator - - - - com.graphql-java - graphql-spring-boot-starter - ${graphql-spring-boot-starter.version} - - - com.graphql-java - graphql-java-tools - ${graphql-java-tools.version} - - - com.graphql-java - graphiql-spring-boot-starter - ${graphiql-spring-boot-starter.version} - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - org.springframework.boot - spring-boot-starter-test - test - - - - io.dropwizard.metrics - metrics-core - - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter - - - com.jayway.jsonpath - json-path - test - - - - com.google.guava - guava - ${guava.version} - - - - org.apache.tomcat - tomcat-servlet-api - ${tomee-servlet-api.version} - provided - - - - org.togglz - togglz-spring-boot-starter - ${togglz.version} - - - - org.togglz - togglz-spring-security - ${togglz.version} - - - - org.apache.activemq - artemis-server - - - - com.rometools - rome - ${rome.version} - - - - de.codecentric - chaos-monkey-spring-boot - ${chaos.monkey.version} - - - - javax.validation - validation-api - - - - - spring-boot - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-war-plugin - - - - pl.project13.maven - git-commit-id-plugin - ${git-commit-id-plugin.version} - - - get-the-git-infos - - revision - - initialize - - - validate-the-git-infos - - validateRevision - - package - - - - true - ${project.build.outputDirectory}/git.properties - - - - - org.apache.maven.plugins - maven-resources-plugin - - - @ - - false - - - - - - - - - autoconfiguration - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*LiveTest.java - **/*IntegrationTest.java - **/*IntTest.java - - - **/AutoconfigurationTest.java - - - - - - - json - - - - - - - - - - - com.baeldung.intro.App - 8.5.11 - 2.4.1.Final - 1.9.0 - 2.0.0 - 5.0.2 - 5.0.2 - 5.2.4 - 18.0 - 2.2.4 - @ - - - + + + 4.0.0 + spring-boot + spring-boot + war + This is simple boot application for Spring boot actuator test + 0.0.1-SNAPSHOT + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../../parent-boot-2 + + + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + org.junit.platform + junit-platform-launcher + ${junit-platform.version} + test + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.ehcache + ehcache + + + org.hibernate + hibernate-ehcache + + + org.springframework.boot + spring-boot-starter-actuator + + + + com.graphql-java + graphql-spring-boot-starter + ${graphql-spring-boot-starter.version} + + + com.graphql-java + graphql-java-tools + ${graphql-java-tools.version} + + + com.graphql-java + graphiql-spring-boot-starter + ${graphiql-spring-boot-starter.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + org.springframework.boot + spring-boot-starter-test + test + + + + io.dropwizard.metrics + metrics-core + + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter + + + com.jayway.jsonpath + json-path + test + + + + com.google.guava + guava + ${guava.version} + + + + org.apache.tomcat + tomcat-servlet-api + ${tomee-servlet-api.version} + provided + + + + org.togglz + togglz-spring-boot-starter + ${togglz.version} + + + + org.togglz + togglz-spring-security + ${togglz.version} + + + + org.apache.activemq + artemis-server + + + + com.rometools + rome + ${rome.version} + + + + de.codecentric + chaos-monkey-spring-boot + ${chaos.monkey.version} + + + + javax.validation + validation-api + + + + + spring-boot + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-war-plugin + + + + pl.project13.maven + git-commit-id-plugin + ${git-commit-id-plugin.version} + + + get-the-git-infos + + revision + + initialize + + + validate-the-git-infos + + validateRevision + + package + + + + true + ${project.build.outputDirectory}/git.properties + + + + + org.apache.maven.plugins + maven-resources-plugin + + + @ + + false + + + + + + + + + autoconfiguration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + **/*IntegrationTest.java + **/*IntTest.java + + + **/AutoconfigurationTest.java + + + + + + + json + + + + + + + + + + + com.baeldung.intro.App + 8.5.11 + 2.4.1.Final + 1.9.0 + 2.0.0 + 5.0.2 + 5.0.2 + 5.2.4 + 18.0 + 2.2.4 + @ + + + diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootAnnotatedApp.java diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/SpringBootPlainApp.java diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java diff --git a/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java diff --git a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java similarity index 97% rename from spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java index b37eec9da0..e2b933a67e 100644 --- a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java @@ -1,28 +1,28 @@ -package com.baeldung.beanvalidation.application; - -import com.baeldung.beanvalidation.application.entities.User; -import com.baeldung.beanvalidation.application.repositories.UserRepository; - -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - - @Bean - public CommandLineRunner run(UserRepository userRepository) throws Exception { - return (String[] args) -> { - User user1 = new User("Bob", "bob@domain.com"); - User user2 = new User("Jenny", "jenny@domain.com"); - userRepository.save(user1); - userRepository.save(user2); - userRepository.findAll().forEach(System.out::println); - }; - } -} +package com.baeldung.beanvalidation.application; + +import com.baeldung.beanvalidation.application.entities.User; +import com.baeldung.beanvalidation.application.repositories.UserRepository; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public CommandLineRunner run(UserRepository userRepository) throws Exception { + return (String[] args) -> { + User user1 = new User("Bob", "bob@domain.com"); + User user2 = new User("Jenny", "jenny@domain.com"); + userRepository.save(user1); + userRepository.save(user2); + userRepository.findAll().forEach(System.out::println); + }; + } +} diff --git a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java similarity index 97% rename from spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java index 0c47e27e25..abda9a9449 100644 --- a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java @@ -1,53 +1,53 @@ -package com.baeldung.beanvalidation.application.controllers; - -import com.baeldung.beanvalidation.application.entities.User; -import com.baeldung.beanvalidation.application.repositories.UserRepository; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.FieldError; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class UserController { - - private final UserRepository userRepository; - - @Autowired - public UserController(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @GetMapping("/users") - public List getUsers() { - return (List) userRepository.findAll(); - } - - @PostMapping("/users") - ResponseEntity addUser(@Valid @RequestBody User user) { - return ResponseEntity.ok("User is valid"); - } - - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(MethodArgumentNotValidException.class) - public Map handleValidationExceptions(MethodArgumentNotValidException ex) { - Map errors = new HashMap<>(); - ex.getBindingResult().getAllErrors().forEach((error) -> { - String fieldName = ((FieldError) error).getField(); - String errorMessage = error.getDefaultMessage(); - errors.put(fieldName, errorMessage); - }); - return errors; - } -} +package com.baeldung.beanvalidation.application.controllers; + +import com.baeldung.beanvalidation.application.entities.User; +import com.baeldung.beanvalidation.application.repositories.UserRepository; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class UserController { + + private final UserRepository userRepository; + + @Autowired + public UserController(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @GetMapping("/users") + public List getUsers() { + return (List) userRepository.findAll(); + } + + @PostMapping("/users") + ResponseEntity addUser(@Valid @RequestBody User user) { + return ResponseEntity.ok("User is valid"); + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(MethodArgumentNotValidException.class) + public Map handleValidationExceptions(MethodArgumentNotValidException ex) { + Map errors = new HashMap<>(); + ex.getBindingResult().getAllErrors().forEach((error) -> { + String fieldName = ((FieldError) error).getField(); + String errorMessage = error.getDefaultMessage(); + errors.put(fieldName, errorMessage); + }); + return errors; + } +} diff --git a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java similarity index 95% rename from spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java index 8233d08f4e..511ce47775 100644 --- a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java @@ -1,50 +1,50 @@ -package com.baeldung.beanvalidation.application.entities; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.validation.constraints.NotBlank; - -@Entity -public class User { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private long id; - - @NotBlank(message = "Name is mandatory") - private String name; - - @NotBlank(message = "Email is mandatory") - private String email; - - public User(){} - - public User(String name, String email) { - this.name = name; - this.email = email; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public String toString() { - return "User{" + "id=" + id + ", name=" + name + ", email=" + email + '}'; - } -} +package com.baeldung.beanvalidation.application.entities; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; + +@Entity +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + @NotBlank(message = "Name is mandatory") + private String name; + + @NotBlank(message = "Email is mandatory") + private String email; + + public User(){} + + public User(String name, String email) { + this.name = name; + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return "User{" + "id=" + id + ", name=" + name + ", email=" + email + '}'; + } +} diff --git a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java similarity index 97% rename from spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java index 8bf7a9f8b2..7b55d15a01 100644 --- a/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java @@ -1,9 +1,9 @@ -package com.baeldung.beanvalidation.application.repositories; - -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -import com.baeldung.beanvalidation.application.entities.User; - -@Repository -public interface UserRepository extends CrudRepository {} +package com.baeldung.beanvalidation.application.repositories; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.beanvalidation.application.entities.User; + +@Repository +public interface UserRepository extends CrudRepository {} diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/FilterConfig.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/FilterConfig.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/bootcustomfilters/FilterConfig.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/FilterConfig.java diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/SpringBootFiltersApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/SpringBootFiltersApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/bootcustomfilters/SpringBootFiltersApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/SpringBootFiltersApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/RequestResponseLoggingFilter.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/RequestResponseLoggingFilter.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/RequestResponseLoggingFilter.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/RequestResponseLoggingFilter.java diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/TransactionFilter.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/TransactionFilter.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/TransactionFilter.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/filters/TransactionFilter.java diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/model/User.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/model/User.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/bootcustomfilters/model/User.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/bootcustomfilters/model/User.java diff --git a/spring-boot/src/main/java/com/baeldung/buildproperties/Application.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/buildproperties/Application.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/buildproperties/Application.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/buildproperties/Application.java diff --git a/spring-boot/src/main/java/com/baeldung/buildproperties/BuildInfoService.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/buildproperties/BuildInfoService.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/buildproperties/BuildInfoService.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/buildproperties/BuildInfoService.java diff --git a/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java diff --git a/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java diff --git a/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java diff --git a/spring-boot/src/main/java/com/baeldung/displayallbeans/Application.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/Application.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/displayallbeans/Application.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/Application.java diff --git a/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java index 630820ff9f..5b5b4ae834 100644 --- a/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java @@ -1,23 +1,23 @@ -package com.baeldung.displayallbeans.controller; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; - -import com.baeldung.displayallbeans.service.FooService; - -@Controller -public class FooController { - @Autowired - private FooService fooService; - - @GetMapping(value = "/displayallbeans") - public ResponseEntity getHeaderAndBody(Map model) { - model.put("header", fooService.getHeader()); - model.put("message", fooService.getBody()); - return ResponseEntity.ok("displayallbeans"); - } -} +package com.baeldung.displayallbeans.controller; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import com.baeldung.displayallbeans.service.FooService; + +@Controller +public class FooController { + @Autowired + private FooService fooService; + + @GetMapping(value = "/displayallbeans") + public ResponseEntity getHeaderAndBody(Map model) { + model.put("header", fooService.getHeader()); + model.put("message", fooService.getBody()); + return ResponseEntity.ok("displayallbeans"); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/displayallbeans/service/FooService.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/service/FooService.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/displayallbeans/service/FooService.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/service/FooService.java index 1f3c15ee0e..d3f1ea294e 100644 --- a/spring-boot/src/main/java/com/baeldung/displayallbeans/service/FooService.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/displayallbeans/service/FooService.java @@ -1,16 +1,16 @@ -package com.baeldung.displayallbeans.service; - -import org.springframework.stereotype.Service; - -@Service -public class FooService { - - public String getHeader() { - return "Display All Beans"; - } - - public String getBody() { - return "This is a sample application that displays all beans " + "in Spring IoC container using ListableBeanFactory interface " + "and Spring Boot Actuators."; - } - -} +package com.baeldung.displayallbeans.service; + +import org.springframework.stereotype.Service; + +@Service +public class FooService { + + public String getHeader() { + return "Display All Beans"; + } + + public String getBody() { + return "This is a sample application that displays all beans " + "in Spring IoC container using ListableBeanFactory interface " + "and Spring Boot Actuators."; + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java diff --git a/spring-boot/src/main/java/com/baeldung/errorhandling/ErrorHandlingApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/errorhandling/ErrorHandlingApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/errorhandling/ErrorHandlingApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/errorhandling/ErrorHandlingApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/IndexController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/IndexController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/errorhandling/controllers/IndexController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/IndexController.java diff --git a/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java diff --git a/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/FailureAnalyzerApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyBeanNotOfRequiredTypeFailureAnalyzer.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyBeanNotOfRequiredTypeFailureAnalyzer.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/failureanalyzer/MyBeanNotOfRequiredTypeFailureAnalyzer.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyBeanNotOfRequiredTypeFailureAnalyzer.java diff --git a/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyDAO.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyDAO.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/failureanalyzer/MyDAO.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyDAO.java diff --git a/spring-boot/src/main/java/com/baeldung/failureanalyzer/MySecondDAO.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MySecondDAO.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/failureanalyzer/MySecondDAO.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MySecondDAO.java diff --git a/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyService.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyService.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/failureanalyzer/MyService.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/failureanalyzer/MyService.java diff --git a/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java diff --git a/spring-boot/src/main/java/com/baeldung/git/README.md b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md similarity index 100% rename from spring-boot/src/main/java/com/baeldung/git/README.md rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md diff --git a/spring-boot/src/main/java/com/baeldung/graphql/Author.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Author.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/Author.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Author.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/AuthorDao.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/AuthorDao.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/AuthorDao.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/AuthorDao.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/AuthorResolver.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/AuthorResolver.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/AuthorResolver.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/AuthorResolver.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/GraphqlConfiguration.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/GraphqlConfiguration.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/GraphqlConfiguration.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/GraphqlConfiguration.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/Mutation.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Mutation.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/Mutation.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Mutation.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/Post.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Post.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/Post.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Post.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/PostDao.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/PostDao.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/PostDao.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/PostDao.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/PostResolver.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/PostResolver.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/PostResolver.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/PostResolver.java diff --git a/spring-boot/src/main/java/com/baeldung/graphql/Query.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Query.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/graphql/Query.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/graphql/Query.java diff --git a/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/internationalization/InternationalizationApp.java diff --git a/spring-boot/src/main/java/com/baeldung/internationalization/config/MvcConfig.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/internationalization/config/MvcConfig.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/internationalization/config/MvcConfig.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/internationalization/config/MvcConfig.java diff --git a/spring-boot/src/main/java/com/baeldung/internationalization/config/PageController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/internationalization/config/PageController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/internationalization/config/PageController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/internationalization/config/PageController.java diff --git a/spring-boot/src/main/java/com/baeldung/intro/App.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/intro/App.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/intro/App.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/intro/App.java index b5d53f0da3..77cdf4ddb9 100644 --- a/spring-boot/src/main/java/com/baeldung/intro/App.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/intro/App.java @@ -1,11 +1,11 @@ -package com.baeldung.intro; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class App { - public static void main(String[] args) { - SpringApplication.run(App.class, args); - } -} +package com.baeldung.intro; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class App { + public static void main(String[] args) { + SpringApplication.run(App.class, args); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java similarity index 95% rename from spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java index 32f22f2cae..4797d6e593 100644 --- a/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java @@ -1,18 +1,18 @@ -package com.baeldung.intro.controller; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class HomeController { - - @GetMapping("/") - public String root() { - return "Index Page"; - } - - @GetMapping("/local") - public String local() { - return "/local"; - } -} +package com.baeldung.intro.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HomeController { + + @GetMapping("/") + public String root() { + return "Index Page"; + } + + @GetMapping("/local") + public String local() { + return "/local"; + } +} diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/Contact.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/Contact.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/Contact.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/Contact.java diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/ContactApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactApp.java diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactAppConfig.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactAppConfig.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/ContactAppConfig.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactAppConfig.java diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/ContactController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactController.java diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactWithJavaUtilDate.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactWithJavaUtilDate.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/ContactWithJavaUtilDate.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/ContactWithJavaUtilDate.java diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContact.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContact.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContact.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContact.java diff --git a/spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContactWithJavaUtilDate.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContactWithJavaUtilDate.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContactWithJavaUtilDate.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/jsondateformat/PlainContactWithJavaUtilDate.java diff --git a/spring-boot/src/main/java/com/baeldung/kong/QueryController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/kong/QueryController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/kong/QueryController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/kong/QueryController.java diff --git a/spring-boot/src/main/java/com/baeldung/kong/StockApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/kong/StockApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/kong/StockApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/kong/StockApp.java diff --git a/spring-boot/src/main/java/com/baeldung/rss/ArticleFeedView.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/ArticleFeedView.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/rss/ArticleFeedView.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/ArticleFeedView.java diff --git a/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java diff --git a/spring-boot/src/main/java/com/baeldung/rss/CustomContainer.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/CustomContainer.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/rss/CustomContainer.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/CustomContainer.java diff --git a/spring-boot/src/main/java/com/baeldung/rss/RssApp.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/RssApp.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/rss/RssApp.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/rss/RssApp.java diff --git a/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/ApplicationMain.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/configuration/WebAppInitializer.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/configuration/WebAppInitializer.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/configuration/WebAppInitializer.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/configuration/WebAppInitializer.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/props/Constants.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/props/Constants.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/props/Constants.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/props/Constants.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/props/PropertyLoader.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/props/PropertyLoader.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/props/PropertyLoader.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/props/PropertyLoader.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/servlets/GenericCustomServlet.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/GenericCustomServlet.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/servlets/GenericCustomServlet.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/GenericCustomServlet.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/EEWebXmlServlet.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/EEWebXmlServlet.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/EEWebXmlServlet.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/javaee/EEWebXmlServlet.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/SpringRegistrationBeanServlet.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/SpringRegistrationBeanServlet.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/SpringRegistrationBeanServlet.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/SpringRegistrationBeanServlet.java diff --git a/spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/embedded/EmbeddedTomcatExample.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/embedded/EmbeddedTomcatExample.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/embedded/EmbeddedTomcatExample.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/servlets/servlets/springboot/embedded/EmbeddedTomcatExample.java diff --git a/spring-boot/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java index 7cce34a06c..44ec9e25ab 100644 --- a/spring-boot/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/ShutdownHookApplication.java @@ -1,14 +1,14 @@ -package com.baeldung.shutdownhooks; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -@EnableAutoConfiguration -public class ShutdownHookApplication { - - public static void main(String args[]) { - SpringApplication.run(ShutdownHookApplication.class, args); - } -} +package com.baeldung.shutdownhooks; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@EnableAutoConfiguration +public class ShutdownHookApplication { + + public static void main(String args[]) { + SpringApplication.run(ShutdownHookApplication.class, args); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java similarity index 95% rename from spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java index e85b9395d3..545599ce25 100644 --- a/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean1.java @@ -1,14 +1,14 @@ -package com.baeldung.shutdownhooks.beans; - -import javax.annotation.PreDestroy; - -import org.springframework.stereotype.Component; - -@Component -public class Bean1 { - - @PreDestroy - public void destroy() { - System.out.println("Shutdown triggered using @PreDestroy."); - } -} +package com.baeldung.shutdownhooks.beans; + +import javax.annotation.PreDestroy; + +import org.springframework.stereotype.Component; + +@Component +public class Bean1 { + + @PreDestroy + public void destroy() { + System.out.println("Shutdown triggered using @PreDestroy."); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java index e85d12e791..b586c1430a 100644 --- a/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean2.java @@ -1,14 +1,14 @@ -package com.baeldung.shutdownhooks.beans; - -import org.springframework.beans.factory.DisposableBean; -import org.springframework.stereotype.Component; - -@Component -public class Bean2 implements DisposableBean { - - @Override - public void destroy() throws Exception { - System.out.println("Shutdown triggered using DisposableBean."); - } - -} +package com.baeldung.shutdownhooks.beans; + +import org.springframework.beans.factory.DisposableBean; +import org.springframework.stereotype.Component; + +@Component +public class Bean2 implements DisposableBean { + + @Override + public void destroy() throws Exception { + System.out.println("Shutdown triggered using DisposableBean."); + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java similarity index 95% rename from spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java index bed1d50ee7..25a56e2859 100644 --- a/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/beans/Bean3.java @@ -1,8 +1,8 @@ -package com.baeldung.shutdownhooks.beans; - -public class Bean3 { - - public void destroy() { - System.out.println("Shutdown triggered using bean destroy method."); - } -} +package com.baeldung.shutdownhooks.beans; + +public class Bean3 { + + public void destroy() { + System.out.println("Shutdown triggered using bean destroy method."); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java index 07d729cb83..03ad5524b6 100644 --- a/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ExampleServletContextListener.java @@ -1,18 +1,18 @@ -package com.baeldung.shutdownhooks.config; - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - -public class ExampleServletContextListener implements ServletContextListener { - - @Override - public void contextDestroyed(ServletContextEvent event) { - System.out.println("Shutdown triggered using ServletContextListener."); - } - - @Override - public void contextInitialized(ServletContextEvent event) { - // Triggers when context initializes - } - -} +package com.baeldung.shutdownhooks.config; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; + +public class ExampleServletContextListener implements ServletContextListener { + + @Override + public void contextDestroyed(ServletContextEvent event) { + System.out.println("Shutdown triggered using ServletContextListener."); + } + + @Override + public void contextInitialized(ServletContextEvent event) { + // Triggers when context initializes + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java similarity index 96% rename from spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java index 2d0712e19b..7d487dfc21 100644 --- a/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java +++ b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/shutdownhooks/config/ShutdownHookConfiguration.java @@ -1,25 +1,25 @@ -package com.baeldung.shutdownhooks.config; - -import javax.servlet.ServletContextListener; - -import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.baeldung.shutdownhooks.beans.Bean3; - -@Configuration -public class ShutdownHookConfiguration { - - @Bean(destroyMethod = "destroy") - public Bean3 initializeBean3() { - return new Bean3(); - } - - @Bean - ServletListenerRegistrationBean servletListener() { - ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean<>(); - srb.setListener(new ExampleServletContextListener()); - return srb; - } -} +package com.baeldung.shutdownhooks.config; + +import javax.servlet.ServletContextListener; + +import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.shutdownhooks.beans.Bean3; + +@Configuration +public class ShutdownHookConfiguration { + + @Bean(destroyMethod = "destroy") + public Bean3 initializeBean3() { + return new Bean3(); + } + + @Bean + ServletListenerRegistrationBean servletListener() { + ServletListenerRegistrationBean srb = new ServletListenerRegistrationBean<>(); + srb.setListener(new ExampleServletContextListener()); + return srb; + } +} diff --git a/spring-boot/src/main/java/com/baeldung/toggle/Employee.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/Employee.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/Employee.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/Employee.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/EmployeeRepository.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/FeatureAssociation.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/FeaturesAspect.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/MyFeatures.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/SalaryController.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/SalaryService.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/ToggleApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/toggle/ToggleConfiguration.java diff --git a/spring-boot/src/main/java/com/baeldung/utils/UtilsApplication.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/utils/UtilsApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/utils/UtilsApplication.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/utils/UtilsApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/utils/controller/UtilsController.java b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/utils/controller/UtilsController.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/utils/controller/UtilsController.java rename to spring-boot-modules/spring-boot/src/main/java/com/baeldung/utils/controller/UtilsController.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/Application.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/Application.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/Application.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/Application.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/config/H2JpaConfig.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/config/H2JpaConfig.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/config/H2JpaConfig.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/config/H2JpaConfig.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/config/WebConfig.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/config/WebConfig.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/config/WebConfig.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/config/WebConfig.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/controller/servlet/HelloWorldServlet.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/controller/servlet/HelloWorldServlet.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/controller/servlet/HelloWorldServlet.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/controller/servlet/HelloWorldServlet.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/controller/servlet/SpringHelloWorldServlet.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/controller/servlet/SpringHelloWorldServlet.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/controller/servlet/SpringHelloWorldServlet.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/controller/servlet/SpringHelloWorldServlet.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/converter/GenericBigDecimalConverter.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/GenericBigDecimalConverter.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/converter/GenericBigDecimalConverter.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/GenericBigDecimalConverter.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/converter/StringToEmployeeConverter.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/StringToEmployeeConverter.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/converter/StringToEmployeeConverter.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/StringToEmployeeConverter.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/converter/StringToEnumConverterFactory.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/StringToEnumConverterFactory.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/converter/StringToEnumConverterFactory.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/StringToEnumConverterFactory.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/converter/controller/StringToEmployeeConverterController.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/controller/StringToEmployeeConverterController.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/converter/controller/StringToEmployeeConverterController.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/converter/controller/StringToEmployeeConverterController.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/domain/Modes.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/domain/Modes.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/domain/Modes.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/domain/Modes.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java diff --git a/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java diff --git a/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java similarity index 95% rename from spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java index 6b342a1bfb..df0e3ec0b2 100644 --- a/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java +++ b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java @@ -1,24 +1,24 @@ -package org.baeldung.common.error; - -import org.springframework.boot.web.servlet.error.ErrorController; -import org.springframework.web.bind.annotation.GetMapping; - -public class MyCustomErrorController implements ErrorController { - - private static final String PATH = "/error"; - - public MyCustomErrorController() { - // TODO Auto-generated constructor stub - } - - @GetMapping(value = PATH) - public String error() { - return "Error haven"; - } - - @Override - public String getErrorPath() { - return PATH; - } - -} +package org.baeldung.common.error; + +import org.springframework.boot.web.servlet.error.ErrorController; +import org.springframework.web.bind.annotation.GetMapping; + +public class MyCustomErrorController implements ErrorController { + + private static final String PATH = "/error"; + + public MyCustomErrorController() { + // TODO Auto-generated constructor stub + } + + @GetMapping(value = PATH) + public String error() { + return "Error haven"; + } + + @Override + public String getErrorPath() { + return PATH; + } + +} diff --git a/spring-boot/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java similarity index 96% rename from spring-boot/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java index 723afddd06..774cf1b970 100644 --- a/spring-boot/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java +++ b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/SpringHelloServletRegistrationBean.java @@ -1,15 +1,15 @@ -package org.baeldung.common.error; - -import org.springframework.boot.web.servlet.ServletRegistrationBean; - -import javax.servlet.Servlet; - -public class SpringHelloServletRegistrationBean extends ServletRegistrationBean { - - public SpringHelloServletRegistrationBean() { - } - - public SpringHelloServletRegistrationBean(Servlet servlet, String... urlMappings) { - super(servlet, urlMappings); - } -} +package org.baeldung.common.error; + +import org.springframework.boot.web.servlet.ServletRegistrationBean; + +import javax.servlet.Servlet; + +public class SpringHelloServletRegistrationBean extends ServletRegistrationBean { + + public SpringHelloServletRegistrationBean() { + } + + public SpringHelloServletRegistrationBean(Servlet servlet, String... urlMappings) { + super(servlet, urlMappings); + } +} diff --git a/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java similarity index 95% rename from spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java index 3e26f8c9d8..ac5f92e9c9 100644 --- a/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java +++ b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java @@ -1,22 +1,22 @@ -package org.baeldung.common.error.controller; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class ErrorController { - - public ErrorController() { - } - - @GetMapping("/400") - String error400() { - return "Error Code: 400 occured."; - } - - @GetMapping("/errorHaven") - String errorHeaven() { - return "You have reached the haven of errors!!!"; - } - -} +package org.baeldung.common.error.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ErrorController { + + public ErrorController() { + } + + @GetMapping("/400") + String error400() { + return "Error Code: 400 occured."; + } + + @GetMapping("/errorHaven") + String errorHeaven() { + return "You have reached the haven of errors!!!"; + } + +} diff --git a/spring-boot/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java similarity index 97% rename from spring-boot/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java index f6ab017298..d553d44769 100644 --- a/spring-boot/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java +++ b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/properties/MyServletContainerCustomizationBean.java @@ -1,25 +1,25 @@ -package org.baeldung.common.properties; - -import org.springframework.boot.web.server.ErrorPage; -import org.springframework.boot.web.server.WebServerFactoryCustomizer; -import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Component; - -@Component -public class MyServletContainerCustomizationBean implements WebServerFactoryCustomizer { - - public MyServletContainerCustomizationBean() { - - } - - @Override - public void customize(ConfigurableServletWebServerFactory container) { - container.setPort(8084); - container.setContextPath("/springbootapp"); - - container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); - container.addErrorPages(new ErrorPage("/errorHaven")); - } - -} +package org.baeldung.common.properties; + +import org.springframework.boot.web.server.ErrorPage; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +@Component +public class MyServletContainerCustomizationBean implements WebServerFactoryCustomizer { + + public MyServletContainerCustomizationBean() { + + } + + @Override + public void customize(ConfigurableServletWebServerFactory container) { + container.setPort(8084); + container.setContextPath("/springbootapp"); + + container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); + container.addErrorPages(new ErrorPage("/errorHaven")); + } + +} diff --git a/spring-boot/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java similarity index 96% rename from spring-boot/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java index be33d64c5d..64853a9941 100644 --- a/spring-boot/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java +++ b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/common/resources/ExecutorServiceExitCodeGenerator.java @@ -1,28 +1,28 @@ -package org.baeldung.common.resources; - -import org.springframework.boot.ExitCodeGenerator; - -import java.util.Objects; -import java.util.concurrent.ExecutorService; - -public class ExecutorServiceExitCodeGenerator implements ExitCodeGenerator { - - private ExecutorService executorService; - - public ExecutorServiceExitCodeGenerator(ExecutorService executorService) { - } - - @Override - public int getExitCode() { - try { - if (!Objects.isNull(executorService)) { - executorService.shutdownNow(); - return 1; - } - - return 0; - } catch (SecurityException ex) { - return 0; - } - } -} +package org.baeldung.common.resources; + +import org.springframework.boot.ExitCodeGenerator; + +import java.util.Objects; +import java.util.concurrent.ExecutorService; + +public class ExecutorServiceExitCodeGenerator implements ExitCodeGenerator { + + private ExecutorService executorService; + + public ExecutorServiceExitCodeGenerator(ExecutorService executorService) { + } + + @Override + public int getExitCode() { + try { + if (!Objects.isNull(executorService)) { + executorService.shutdownNow(); + return 1; + } + + return 0; + } catch (SecurityException ex) { + return 0; + } + } +} diff --git a/spring-boot/src/main/java/org/baeldung/demo/DemoApplication.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/DemoApplication.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/DemoApplication.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/DemoApplication.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/boottest/Employee.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/Employee.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/boottest/Employee.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/Employee.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRepository.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRepository.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRepository.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRepository.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRestController.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRestController.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRestController.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeRestController.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeService.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeService.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeService.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeService.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeServiceImpl.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeServiceImpl.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeServiceImpl.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/boottest/EmployeeServiceImpl.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/components/FooService.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/components/FooService.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/components/FooService.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/components/FooService.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/exceptions/CommonException.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/exceptions/CommonException.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/exceptions/CommonException.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/exceptions/CommonException.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/exceptions/FooNotFoundException.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/exceptions/FooNotFoundException.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/exceptions/FooNotFoundException.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/exceptions/FooNotFoundException.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/model/Foo.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/model/Foo.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/model/Foo.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/model/Foo.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/repository/FooRepository.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/repository/FooRepository.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/repository/FooRepository.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/repository/FooRepository.java diff --git a/spring-boot/src/main/java/org/baeldung/demo/service/FooController.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/service/FooController.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/demo/service/FooController.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/demo/service/FooController.java diff --git a/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/endpoints/info/TotalUsersInfoContributor.java diff --git a/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java similarity index 97% rename from spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java index 30ac94221b..a203659d63 100644 --- a/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java +++ b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java @@ -1,63 +1,63 @@ -package org.baeldung.main; - -import org.baeldung.boot.controller.servlet.HelloWorldServlet; -import org.baeldung.boot.controller.servlet.SpringHelloWorldServlet; -import org.baeldung.common.error.SpringHelloServletRegistrationBean; -import org.baeldung.common.resources.ExecutorServiceExitCodeGenerator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -@RestController -@EnableAutoConfiguration -@ComponentScan({ "org.baeldung.common.error", "org.baeldung.common.error.controller", "org.baeldung.common.properties", "org.baeldung.common.resources", "org.baeldung.endpoints", "org.baeldung.service", "org.baeldung.monitor.jmx", "org.baeldung.boot.config" }) -public class SpringBootApplication { - - private static ApplicationContext applicationContext; - - @GetMapping("/") - String home() { - return "TADA!!! You are in Spring Boot Actuator test application."; - } - - public static void main(String[] args) { - applicationContext = SpringApplication.run(SpringBootApplication.class, args); - } - - @Bean - public ExecutorService executorService() { - return Executors.newFixedThreadPool(10); - } - - @Bean - public HelloWorldServlet helloWorldServlet() { - return new HelloWorldServlet(); - } - - @Bean - public SpringHelloServletRegistrationBean servletRegistrationBean() { - SpringHelloServletRegistrationBean bean = new SpringHelloServletRegistrationBean(new SpringHelloWorldServlet(), "/springHelloWorld/*"); - bean.setLoadOnStartup(1); - bean.addInitParameter("message", "SpringHelloWorldServlet special message"); - return bean; - } - - @Bean - @Autowired - public ExecutorServiceExitCodeGenerator executorServiceExitCodeGenerator(ExecutorService executorService) { - return new ExecutorServiceExitCodeGenerator(executorService); - } - - public void shutDown(ExecutorServiceExitCodeGenerator executorServiceExitCodeGenerator) { - SpringApplication.exit(applicationContext, executorServiceExitCodeGenerator); - } - -} +package org.baeldung.main; + +import org.baeldung.boot.controller.servlet.HelloWorldServlet; +import org.baeldung.boot.controller.servlet.SpringHelloWorldServlet; +import org.baeldung.common.error.SpringHelloServletRegistrationBean; +import org.baeldung.common.resources.ExecutorServiceExitCodeGenerator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@RestController +@EnableAutoConfiguration +@ComponentScan({ "org.baeldung.common.error", "org.baeldung.common.error.controller", "org.baeldung.common.properties", "org.baeldung.common.resources", "org.baeldung.endpoints", "org.baeldung.service", "org.baeldung.monitor.jmx", "org.baeldung.boot.config" }) +public class SpringBootApplication { + + private static ApplicationContext applicationContext; + + @GetMapping("/") + String home() { + return "TADA!!! You are in Spring Boot Actuator test application."; + } + + public static void main(String[] args) { + applicationContext = SpringApplication.run(SpringBootApplication.class, args); + } + + @Bean + public ExecutorService executorService() { + return Executors.newFixedThreadPool(10); + } + + @Bean + public HelloWorldServlet helloWorldServlet() { + return new HelloWorldServlet(); + } + + @Bean + public SpringHelloServletRegistrationBean servletRegistrationBean() { + SpringHelloServletRegistrationBean bean = new SpringHelloServletRegistrationBean(new SpringHelloWorldServlet(), "/springHelloWorld/*"); + bean.setLoadOnStartup(1); + bean.addInitParameter("message", "SpringHelloWorldServlet special message"); + return bean; + } + + @Bean + @Autowired + public ExecutorServiceExitCodeGenerator executorServiceExitCodeGenerator(ExecutorService executorService) { + return new ExecutorServiceExitCodeGenerator(executorService); + } + + public void shutDown(ExecutorServiceExitCodeGenerator executorServiceExitCodeGenerator) { + SpringApplication.exit(applicationContext, executorServiceExitCodeGenerator); + } + +} diff --git a/spring-boot/src/main/java/org/baeldung/model/User.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/model/User.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/model/User.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/model/User.java diff --git a/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/repository/UserRepository.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/Application.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/session/exception/Application.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/session/exception/Application.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/session/exception/Application.java diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepository.java diff --git a/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/session/exception/repository/FooRepositoryImpl.java diff --git a/spring-boot/src/main/java/org/baeldung/startup/AppStartupRunner.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/startup/AppStartupRunner.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/startup/AppStartupRunner.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/startup/AppStartupRunner.java diff --git a/spring-boot/src/main/java/org/baeldung/startup/CommandLineAppStartupRunner.java b/spring-boot-modules/spring-boot/src/main/java/org/baeldung/startup/CommandLineAppStartupRunner.java similarity index 100% rename from spring-boot/src/main/java/org/baeldung/startup/CommandLineAppStartupRunner.java rename to spring-boot-modules/spring-boot/src/main/java/org/baeldung/startup/CommandLineAppStartupRunner.java diff --git a/spring-boot/src/main/resources/META-INF/spring.factories b/spring-boot-modules/spring-boot/src/main/resources/META-INF/spring.factories similarity index 100% rename from spring-boot/src/main/resources/META-INF/spring.factories rename to spring-boot-modules/spring-boot/src/main/resources/META-INF/spring.factories diff --git a/spring-boot/src/main/resources/application-errorhandling.properties b/spring-boot-modules/spring-boot/src/main/resources/application-errorhandling.properties similarity index 100% rename from spring-boot/src/main/resources/application-errorhandling.properties rename to spring-boot-modules/spring-boot/src/main/resources/application-errorhandling.properties diff --git a/spring-boot/src/main/resources/application.properties b/spring-boot-modules/spring-boot/src/main/resources/application.properties similarity index 96% rename from spring-boot/src/main/resources/application.properties rename to spring-boot-modules/spring-boot/src/main/resources/application.properties index 918fe5ea67..c322fb0573 100644 --- a/spring-boot/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot/src/main/resources/application.properties @@ -1,74 +1,74 @@ -server.port=9090 -server.servlet.contextPath=/springbootapp -management.server.port=8081 -management.server.address=127.0.0.1 -#debug=true -spring.jpa.show-sql=true -spring.jpa.hibernate.ddl-auto = update - -management.endpoints.jmx.domain=Spring Sample Application -spring.jmx.unique-names=true - -management.endpoints.web.exposure.include=* -management.endpoint.shutdown.enabled=true - -##jolokia.config.debug=true -##endpoints.jolokia.enabled=true -##endpoints.jolokia.path=jolokia - -spring.jmx.enabled=true - -## for pretty printing of json when endpoints accessed over HTTP -http.mappers.jsonPrettyPrint=true - -## Configuring info endpoint -info.app.name=Spring Sample Application -info.app.description=This is my first spring boot application G1 -info.app.version=1.0.0 -info.java-vendor = ${java.specification.vendor} - -logging.level.org.springframework=INFO - -#Servlet Configuration -servlet.name=dispatcherExample -servlet.mapping=/dispatcherExampleURL - -#spring.banner.charset=UTF-8 -#spring.banner.location=classpath:banner.txt -#spring.banner.image.location=classpath:banner.gif -#spring.banner.image.width= //TODO -#spring.banner.image.height= //TODO -#spring.banner.image.margin= //TODO -#spring.banner.image.invert= //TODO - -contactInfoType=email - -#chaos monkey for spring boot props -management.endpoint.chaosmonkey.enabled=true -management.endpoint.chaosmonkeyjmx.enabled=true - -spring.profiles.active=chaos-monkey -#Determine whether should execute or not -chaos.monkey.enabled=true -#How many requests are to be attacked. 1: attack each request; 5: each 5th request is attacked -chaos.monkey.assaults.level=1 -#Minimum latency in ms added to the request -chaos.monkey.assaults.latencyRangeStart=3000 -#Maximum latency in ms added to the request -chaos.monkey.assaults.latencyRangeEnd=15000 -#Latency assault active -chaos.monkey.assaults.latencyActive=true -#Exception assault active -chaos.monkey.assaults.exceptionsActive=false -#AppKiller assault active -chaos.monkey.assaults.killApplicationActive=false -#Controller watcher active -chaos.monkey.watcher.controller=false -#RestController watcher active -chaos.monkey.watcher.restController=false -#Service watcher active -chaos.monkey.watcher.service=true -#Repository watcher active -chaos.monkey.watcher.repository=false -#Component watcher active -chaos.monkey.watcher.component=false +server.port=9090 +server.servlet.contextPath=/springbootapp +management.server.port=8081 +management.server.address=127.0.0.1 +#debug=true +spring.jpa.show-sql=true +spring.jpa.hibernate.ddl-auto = update + +management.endpoints.jmx.domain=Spring Sample Application +spring.jmx.unique-names=true + +management.endpoints.web.exposure.include=* +management.endpoint.shutdown.enabled=true + +##jolokia.config.debug=true +##endpoints.jolokia.enabled=true +##endpoints.jolokia.path=jolokia + +spring.jmx.enabled=true + +## for pretty printing of json when endpoints accessed over HTTP +http.mappers.jsonPrettyPrint=true + +## Configuring info endpoint +info.app.name=Spring Sample Application +info.app.description=This is my first spring boot application G1 +info.app.version=1.0.0 +info.java-vendor = ${java.specification.vendor} + +logging.level.org.springframework=INFO + +#Servlet Configuration +servlet.name=dispatcherExample +servlet.mapping=/dispatcherExampleURL + +#spring.banner.charset=UTF-8 +#spring.banner.location=classpath:banner.txt +#spring.banner.image.location=classpath:banner.gif +#spring.banner.image.width= //TODO +#spring.banner.image.height= //TODO +#spring.banner.image.margin= //TODO +#spring.banner.image.invert= //TODO + +contactInfoType=email + +#chaos monkey for spring boot props +management.endpoint.chaosmonkey.enabled=true +management.endpoint.chaosmonkeyjmx.enabled=true + +spring.profiles.active=chaos-monkey +#Determine whether should execute or not +chaos.monkey.enabled=true +#How many requests are to be attacked. 1: attack each request; 5: each 5th request is attacked +chaos.monkey.assaults.level=1 +#Minimum latency in ms added to the request +chaos.monkey.assaults.latencyRangeStart=3000 +#Maximum latency in ms added to the request +chaos.monkey.assaults.latencyRangeEnd=15000 +#Latency assault active +chaos.monkey.assaults.latencyActive=true +#Exception assault active +chaos.monkey.assaults.exceptionsActive=false +#AppKiller assault active +chaos.monkey.assaults.killApplicationActive=false +#Controller watcher active +chaos.monkey.watcher.controller=false +#RestController watcher active +chaos.monkey.watcher.restController=false +#Service watcher active +chaos.monkey.watcher.service=true +#Repository watcher active +chaos.monkey.watcher.repository=false +#Component watcher active +chaos.monkey.watcher.component=false diff --git a/spring-boot/src/main/resources/banner.txt b/spring-boot-modules/spring-boot/src/main/resources/banner.txt similarity index 100% rename from spring-boot/src/main/resources/banner.txt rename to spring-boot-modules/spring-boot/src/main/resources/banner.txt diff --git a/spring-boot/src/main/resources/build.properties b/spring-boot-modules/spring-boot/src/main/resources/build.properties similarity index 100% rename from spring-boot/src/main/resources/build.properties rename to spring-boot-modules/spring-boot/src/main/resources/build.properties diff --git a/spring-boot/src/main/resources/build.yml b/spring-boot-modules/spring-boot/src/main/resources/build.yml similarity index 100% rename from spring-boot/src/main/resources/build.yml rename to spring-boot-modules/spring-boot/src/main/resources/build.yml diff --git a/spring-boot/src/main/resources/custom.properties b/spring-boot-modules/spring-boot/src/main/resources/custom.properties similarity index 100% rename from spring-boot/src/main/resources/custom.properties rename to spring-boot-modules/spring-boot/src/main/resources/custom.properties diff --git a/spring-boot/src/main/resources/data-expressions.sql b/spring-boot-modules/spring-boot/src/main/resources/data-expressions.sql similarity index 100% rename from spring-boot/src/main/resources/data-expressions.sql rename to spring-boot-modules/spring-boot/src/main/resources/data-expressions.sql diff --git a/spring-boot/src/main/resources/data.sql b/spring-boot-modules/spring-boot/src/main/resources/data.sql similarity index 100% rename from spring-boot/src/main/resources/data.sql rename to spring-boot-modules/spring-boot/src/main/resources/data.sql diff --git a/spring-boot/src/main/resources/demo.properties b/spring-boot-modules/spring-boot/src/main/resources/demo.properties similarity index 100% rename from spring-boot/src/main/resources/demo.properties rename to spring-boot-modules/spring-boot/src/main/resources/demo.properties diff --git a/spring-boot/src/main/resources/graphql/blog.graphqls b/spring-boot-modules/spring-boot/src/main/resources/graphql/blog.graphqls similarity index 100% rename from spring-boot/src/main/resources/graphql/blog.graphqls rename to spring-boot-modules/spring-boot/src/main/resources/graphql/blog.graphqls diff --git a/spring-boot/src/main/resources/logback.xml b/spring-boot-modules/spring-boot/src/main/resources/logback.xml similarity index 100% rename from spring-boot/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot/src/main/resources/logback.xml diff --git a/spring-boot/src/main/resources/messages.properties b/spring-boot-modules/spring-boot/src/main/resources/messages.properties similarity index 100% rename from spring-boot/src/main/resources/messages.properties rename to spring-boot-modules/spring-boot/src/main/resources/messages.properties diff --git a/spring-boot/src/main/resources/messages_fr.properties b/spring-boot-modules/spring-boot/src/main/resources/messages_fr.properties similarity index 100% rename from spring-boot/src/main/resources/messages_fr.properties rename to spring-boot-modules/spring-boot/src/main/resources/messages_fr.properties diff --git a/spring-boot/src/main/resources/persistence-generic-entity.properties b/spring-boot-modules/spring-boot/src/main/resources/persistence-generic-entity.properties similarity index 100% rename from spring-boot/src/main/resources/persistence-generic-entity.properties rename to spring-boot-modules/spring-boot/src/main/resources/persistence-generic-entity.properties diff --git a/spring-boot/src/main/resources/templates/error/404.html b/spring-boot-modules/spring-boot/src/main/resources/public/error/404.html similarity index 100% rename from spring-boot/src/main/resources/templates/error/404.html rename to spring-boot-modules/spring-boot/src/main/resources/public/error/404.html diff --git a/spring-boot/src/main/resources/schema-expressions.sql b/spring-boot-modules/spring-boot/src/main/resources/schema-expressions.sql similarity index 100% rename from spring-boot/src/main/resources/schema-expressions.sql rename to spring-boot-modules/spring-boot/src/main/resources/schema-expressions.sql diff --git a/spring-boot/src/main/resources/schema.sql b/spring-boot-modules/spring-boot/src/main/resources/schema.sql similarity index 100% rename from spring-boot/src/main/resources/schema.sql rename to spring-boot-modules/spring-boot/src/main/resources/schema.sql diff --git a/spring-boot/src/main/resources/shutdown/shutdown.bat b/spring-boot-modules/spring-boot/src/main/resources/shutdown/shutdown.bat similarity index 100% rename from spring-boot/src/main/resources/shutdown/shutdown.bat rename to spring-boot-modules/spring-boot/src/main/resources/shutdown/shutdown.bat diff --git a/spring-boot/src/main/resources/static/internationalization.js b/spring-boot-modules/spring-boot/src/main/resources/static/internationalization.js similarity index 100% rename from spring-boot/src/main/resources/static/internationalization.js rename to spring-boot-modules/spring-boot/src/main/resources/static/internationalization.js diff --git a/spring-boot/src/main/resources/templates/customer.html b/spring-boot-modules/spring-boot/src/main/resources/templates/customer.html similarity index 100% rename from spring-boot/src/main/resources/templates/customer.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/customer.html diff --git a/spring-boot/src/main/resources/templates/customers.html b/spring-boot-modules/spring-boot/src/main/resources/templates/customers.html similarity index 100% rename from spring-boot/src/main/resources/templates/customers.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/customers.html diff --git a/spring-boot/src/main/resources/templates/displayallbeans.html b/spring-boot-modules/spring-boot/src/main/resources/templates/displayallbeans.html similarity index 100% rename from spring-boot/src/main/resources/templates/displayallbeans.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/displayallbeans.html diff --git a/spring-boot/src/main/resources/templates/error-404.html b/spring-boot-modules/spring-boot/src/main/resources/templates/error-404.html similarity index 100% rename from spring-boot/src/main/resources/templates/error-404.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/error-404.html diff --git a/spring-boot/src/main/resources/templates/error-500.html b/spring-boot-modules/spring-boot/src/main/resources/templates/error-500.html similarity index 100% rename from spring-boot/src/main/resources/templates/error-500.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/error-500.html diff --git a/spring-boot/src/main/resources/templates/error.html b/spring-boot-modules/spring-boot/src/main/resources/templates/error.html similarity index 100% rename from spring-boot/src/main/resources/templates/error.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/error.html diff --git a/spring-boot/src/main/resources/public/error/404.html b/spring-boot-modules/spring-boot/src/main/resources/templates/error/404.html similarity index 88% rename from spring-boot/src/main/resources/public/error/404.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/error/404.html index 02d6092bee..df83ce219b 100644 --- a/spring-boot/src/main/resources/public/error/404.html +++ b/spring-boot-modules/spring-boot/src/main/resources/templates/error/404.html @@ -1,8 +1,8 @@ - - - RESOURCE NOT FOUND - - -

404 RESOURCE NOT FOUND

- + + + RESOURCE NOT FOUND + + +

404 RESOURCE NOT FOUND

+ \ No newline at end of file diff --git a/spring-boot/src/main/resources/templates/external.html b/spring-boot-modules/spring-boot/src/main/resources/templates/external.html similarity index 100% rename from spring-boot/src/main/resources/templates/external.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/external.html diff --git a/spring-boot/src/main/resources/templates/index.html b/spring-boot-modules/spring-boot/src/main/resources/templates/index.html similarity index 100% rename from spring-boot/src/main/resources/templates/index.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/index.html diff --git a/spring-boot/src/main/resources/templates/international.html b/spring-boot-modules/spring-boot/src/main/resources/templates/international.html similarity index 100% rename from spring-boot/src/main/resources/templates/international.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/international.html diff --git a/spring-boot/src/main/resources/templates/layout.html b/spring-boot-modules/spring-boot/src/main/resources/templates/layout.html similarity index 100% rename from spring-boot/src/main/resources/templates/layout.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/layout.html diff --git a/spring-boot/src/main/resources/templates/other.html b/spring-boot-modules/spring-boot/src/main/resources/templates/other.html similarity index 100% rename from spring-boot/src/main/resources/templates/other.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/other.html diff --git a/spring-boot/src/main/resources/templates/utils.html b/spring-boot-modules/spring-boot/src/main/resources/templates/utils.html similarity index 100% rename from spring-boot/src/main/resources/templates/utils.html rename to spring-boot-modules/spring-boot/src/main/resources/templates/utils.html diff --git a/spring-boot/src/main/webapp/WEB-INF/context.xml b/spring-boot-modules/spring-boot/src/main/webapp/WEB-INF/context.xml similarity index 100% rename from spring-boot/src/main/webapp/WEB-INF/context.xml rename to spring-boot-modules/spring-boot/src/main/webapp/WEB-INF/context.xml diff --git a/spring-boot/src/main/webapp/WEB-INF/dispatcher.xml b/spring-boot-modules/spring-boot/src/main/webapp/WEB-INF/dispatcher.xml similarity index 100% rename from spring-boot/src/main/webapp/WEB-INF/dispatcher.xml rename to spring-boot-modules/spring-boot/src/main/webapp/WEB-INF/dispatcher.xml diff --git a/spring-boot/src/main/webapp/WEB-INF/web.xml b/spring-boot-modules/spring-boot/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from spring-boot/src/main/webapp/WEB-INF/web.xml rename to spring-boot-modules/spring-boot/src/main/webapp/WEB-INF/web.xml diff --git a/spring-boot/src/main/webapp/annotationservlet.jsp b/spring-boot-modules/spring-boot/src/main/webapp/annotationservlet.jsp similarity index 100% rename from spring-boot/src/main/webapp/annotationservlet.jsp rename to spring-boot-modules/spring-boot/src/main/webapp/annotationservlet.jsp diff --git a/spring-boot/src/main/webapp/index.jsp b/spring-boot-modules/spring-boot/src/main/webapp/index.jsp similarity index 100% rename from spring-boot/src/main/webapp/index.jsp rename to spring-boot-modules/spring-boot/src/main/webapp/index.jsp diff --git a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java similarity index 97% rename from spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java index 21395c779b..21fcaf922c 100644 --- a/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java +++ b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java @@ -1,71 +1,71 @@ -package com.baeldung.beanvalidation.application; - -import com.baeldung.beanvalidation.application.controllers.UserController; -import com.baeldung.beanvalidation.application.repositories.UserRepository; -import org.hamcrest.core.Is; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; - -import java.nio.charset.Charset; - -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(SpringRunner.class) -@WebMvcTest -@AutoConfigureMockMvc -public class UserControllerIntegrationTest { - - @MockBean - private UserRepository userRepository; - - @Autowired - UserController userController; - - @Autowired - private MockMvc mockMvc; - - @Test - public void whenUserControllerInjected_thenNotNull() throws Exception { - assertThat(userController).isNotNull(); - } - - @Test - public void whenGetRequestToUsers_thenCorrectResponse() throws Exception { - mockMvc.perform(MockMvcRequestBuilders.get("/users") - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)); - - } - - @Test - public void whenPostRequestToUsersAndValidUser_thenCorrectResponse() throws Exception { - MediaType textPlainUtf8 = new MediaType(MediaType.TEXT_PLAIN, Charset.forName("UTF-8")); - String user = "{\"name\": \"bob\", \"email\" : \"bob@domain.com\"}"; - mockMvc.perform(MockMvcRequestBuilders.post("/users") - .content(user) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(textPlainUtf8)); - } - - @Test - public void whenPostRequestToUsersAndInValidUser_thenCorrectReponse() throws Exception { - String user = "{\"name\": \"\", \"email\" : \"bob@domain.com\"}"; - mockMvc.perform(MockMvcRequestBuilders.post("/users") - .content(user) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(MockMvcResultMatchers.status().isBadRequest()) - .andExpect(MockMvcResultMatchers.jsonPath("$.name", Is.is("Name is mandatory"))) - .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)); - } -} +package com.baeldung.beanvalidation.application; + +import com.baeldung.beanvalidation.application.controllers.UserController; +import com.baeldung.beanvalidation.application.repositories.UserRepository; +import org.hamcrest.core.Is; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import java.nio.charset.Charset; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@WebMvcTest +@AutoConfigureMockMvc +public class UserControllerIntegrationTest { + + @MockBean + private UserRepository userRepository; + + @Autowired + UserController userController; + + @Autowired + private MockMvc mockMvc; + + @Test + public void whenUserControllerInjected_thenNotNull() throws Exception { + assertThat(userController).isNotNull(); + } + + @Test + public void whenGetRequestToUsers_thenCorrectResponse() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get("/users") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)); + + } + + @Test + public void whenPostRequestToUsersAndValidUser_thenCorrectResponse() throws Exception { + MediaType textPlainUtf8 = new MediaType(MediaType.TEXT_PLAIN, Charset.forName("UTF-8")); + String user = "{\"name\": \"bob\", \"email\" : \"bob@domain.com\"}"; + mockMvc.perform(MockMvcRequestBuilders.post("/users") + .content(user) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.content().contentType(textPlainUtf8)); + } + + @Test + public void whenPostRequestToUsersAndInValidUser_thenCorrectReponse() throws Exception { + String user = "{\"name\": \"\", \"email\" : \"bob@domain.com\"}"; + mockMvc.perform(MockMvcRequestBuilders.post("/users") + .content(user) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(MockMvcResultMatchers.status().isBadRequest()) + .andExpect(MockMvcResultMatchers.jsonPath("$.name", Is.is("Name is mandatory"))) + .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)); + } +} diff --git a/spring-boot/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java similarity index 97% rename from spring-boot/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java index e933920a96..f08a755fc7 100644 --- a/spring-boot/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java +++ b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/displayallbeans/DisplayBeanIntegrationTest.java @@ -1,101 +1,101 @@ -package com.baeldung.displayallbeans; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.BDDAssertions.then; - -import java.net.URI; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.actuate.beans.BeansEndpoint.ContextBeans; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.web.context.WebApplicationContext; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@TestPropertySource(properties = { "management.port=0", "management.endpoints.web.exposure.include=*" }) -public class DisplayBeanIntegrationTest { - - @LocalServerPort - private int port; - - @Value("${local.management.port}") - private int mgt; - - @Autowired - private TestRestTemplate testRestTemplate; - - @Autowired - private WebApplicationContext context; - - private static final String ACTUATOR_PATH = "/actuator"; - - @Test - public void givenRestTemplate_whenAccessServerUrl_thenHttpStatusOK() throws Exception { - ResponseEntity entity = this.testRestTemplate.getForEntity("http://localhost:" + this.port + "/displayallbeans", String.class); - - then(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - } - - @Test - public void givenRestTemplate_whenAccessEndpointUrl_thenHttpStatusOK() throws Exception { - ParameterizedTypeReference> responseType = new ParameterizedTypeReference>() { - }; - RequestEntity requestEntity = RequestEntity.get(new URI("http://localhost:" + this.mgt + ACTUATOR_PATH + "/beans")) - .accept(MediaType.APPLICATION_JSON) - .build(); - ResponseEntity> entity = this.testRestTemplate.exchange(requestEntity, responseType); - - then(entity.getStatusCode()).isEqualTo(HttpStatus.OK); - } - - @Test - public void givenRestTemplate_whenAccessEndpointUrl_thenReturnsBeanNames() throws Exception { - RequestEntity requestEntity = RequestEntity.get(new URI("http://localhost:" + this.mgt + ACTUATOR_PATH + "/beans")) - .accept(MediaType.APPLICATION_JSON) - .build(); - ResponseEntity entity = this.testRestTemplate.exchange(requestEntity, BeanActuatorResponse.class); - - Collection beanNamesList = entity.getBody() - .getBeans(); - - assertThat(beanNamesList).contains("fooController", "fooService"); - } - - @Test - public void givenWebApplicationContext_whenAccessGetBeanDefinitionNames_thenReturnsBeanNames() throws Exception { - String[] beanNames = context.getBeanDefinitionNames(); - - List beanNamesList = Arrays.asList(beanNames); - assertThat(beanNamesList).contains("fooController", "fooService"); - } - - private static class BeanActuatorResponse { - private Map>>> contexts; - - public Collection getBeans() { - return this.contexts.get("application") - .get("beans") - .keySet(); - } - - public Map>>> getContexts() { - return contexts; - } - } -} +package com.baeldung.displayallbeans; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.BDDAssertions.then; + +import java.net.URI; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.actuate.beans.BeansEndpoint.ContextBeans; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.context.WebApplicationContext; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@TestPropertySource(properties = { "management.port=0", "management.endpoints.web.exposure.include=*" }) +public class DisplayBeanIntegrationTest { + + @LocalServerPort + private int port; + + @Value("${local.management.port}") + private int mgt; + + @Autowired + private TestRestTemplate testRestTemplate; + + @Autowired + private WebApplicationContext context; + + private static final String ACTUATOR_PATH = "/actuator"; + + @Test + public void givenRestTemplate_whenAccessServerUrl_thenHttpStatusOK() throws Exception { + ResponseEntity entity = this.testRestTemplate.getForEntity("http://localhost:" + this.port + "/displayallbeans", String.class); + + then(entity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + public void givenRestTemplate_whenAccessEndpointUrl_thenHttpStatusOK() throws Exception { + ParameterizedTypeReference> responseType = new ParameterizedTypeReference>() { + }; + RequestEntity requestEntity = RequestEntity.get(new URI("http://localhost:" + this.mgt + ACTUATOR_PATH + "/beans")) + .accept(MediaType.APPLICATION_JSON) + .build(); + ResponseEntity> entity = this.testRestTemplate.exchange(requestEntity, responseType); + + then(entity.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + public void givenRestTemplate_whenAccessEndpointUrl_thenReturnsBeanNames() throws Exception { + RequestEntity requestEntity = RequestEntity.get(new URI("http://localhost:" + this.mgt + ACTUATOR_PATH + "/beans")) + .accept(MediaType.APPLICATION_JSON) + .build(); + ResponseEntity entity = this.testRestTemplate.exchange(requestEntity, BeanActuatorResponse.class); + + Collection beanNamesList = entity.getBody() + .getBeans(); + + assertThat(beanNamesList).contains("fooController", "fooService"); + } + + @Test + public void givenWebApplicationContext_whenAccessGetBeanDefinitionNames_thenReturnsBeanNames() throws Exception { + String[] beanNames = context.getBeanDefinitionNames(); + + List beanNamesList = Arrays.asList(beanNames); + assertThat(beanNamesList).contains("fooController", "fooService"); + } + + private static class BeanActuatorResponse { + private Map>>> contexts; + + public Collection getBeans() { + return this.contexts.get("application") + .get("beans") + .keySet(); + } + + public Map>>> getContexts() { + return contexts; + } + } +} diff --git a/spring-boot/src/test/java/com/baeldung/failureanalyzer/FailureAnalyzerAppIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/failureanalyzer/FailureAnalyzerAppIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/failureanalyzer/FailureAnalyzerAppIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/failureanalyzer/FailureAnalyzerAppIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/failureanalyzer/utils/ListAppender.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/failureanalyzer/utils/ListAppender.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/failureanalyzer/utils/ListAppender.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/failureanalyzer/utils/ListAppender.java diff --git a/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java diff --git a/spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppUnitTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppUnitTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppUnitTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppUnitTest.java diff --git a/spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppWithObjectMapperCustomizerUnitTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppWithObjectMapperCustomizerUnitTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppWithObjectMapperCustomizerUnitTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/jsondateformat/ContactAppWithObjectMapperCustomizerUnitTest.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/KongAdminAPILiveTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/KongAdminAPILiveTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/KongAdminAPILiveTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/KongAdminAPILiveTest.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/KongLoadBalanceLiveTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/KongLoadBalanceLiveTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/KongLoadBalanceLiveTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/KongLoadBalanceLiveTest.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/domain/APIObject.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/APIObject.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/domain/APIObject.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/APIObject.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/domain/ConsumerObject.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/ConsumerObject.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/domain/ConsumerObject.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/ConsumerObject.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/domain/KeyAuthObject.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/KeyAuthObject.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/domain/KeyAuthObject.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/KeyAuthObject.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/domain/PluginObject.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/PluginObject.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/domain/PluginObject.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/PluginObject.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/domain/TargetObject.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/TargetObject.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/domain/TargetObject.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/TargetObject.java diff --git a/spring-boot/src/test/java/com/baeldung/kong/domain/UpstreamObject.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/UpstreamObject.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/kong/domain/UpstreamObject.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/kong/domain/UpstreamObject.java diff --git a/spring-boot/src/test/java/com/baeldung/servletinitializer/WarInitializerApplicationIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/servletinitializer/WarInitializerApplicationIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/servletinitializer/WarInitializerApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/servletinitializer/WarInitializerApplicationIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java diff --git a/spring-boot/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/converter/CustomConverterIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/converter/CustomConverterIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/converter/CustomConverterIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/converter/CustomConverterIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeControllerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeControllerIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeControllerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeControllerIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRepositoryIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRepositoryIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRepositoryIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeServiceImplIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeServiceImplIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeServiceImplIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeServiceImplIntegrationTest.java diff --git a/spring-boot/src/test/java/org/baeldung/demo/boottest/JsonUtil.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/JsonUtil.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/demo/boottest/JsonUtil.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/demo/boottest/JsonUtil.java diff --git a/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java b/spring-boot-modules/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java rename to spring-boot-modules/spring-boot/src/test/java/org/baeldung/repository/UserRepositoryIntegrationTest.java diff --git a/spring-boot/src/test/resources/application-integrationtest.properties b/spring-boot-modules/spring-boot/src/test/resources/application-integrationtest.properties similarity index 100% rename from spring-boot/src/test/resources/application-integrationtest.properties rename to spring-boot-modules/spring-boot/src/test/resources/application-integrationtest.properties diff --git a/spring-boot/src/test/resources/application.properties b/spring-boot-modules/spring-boot/src/test/resources/application.properties similarity index 100% rename from spring-boot/src/test/resources/application.properties rename to spring-boot-modules/spring-boot/src/test/resources/application.properties diff --git a/spring-boot/src/test/resources/conversion.properties b/spring-boot-modules/spring-boot/src/test/resources/conversion.properties similarity index 100% rename from spring-boot/src/test/resources/conversion.properties rename to spring-boot-modules/spring-boot/src/test/resources/conversion.properties diff --git a/spring-boot/src/test/resources/exception-hibernate.properties b/spring-boot-modules/spring-boot/src/test/resources/exception-hibernate.properties similarity index 100% rename from spring-boot/src/test/resources/exception-hibernate.properties rename to spring-boot-modules/spring-boot/src/test/resources/exception-hibernate.properties diff --git a/spring-boot/src/test/resources/exception.properties b/spring-boot-modules/spring-boot/src/test/resources/exception.properties similarity index 100% rename from spring-boot/src/test/resources/exception.properties rename to spring-boot-modules/spring-boot/src/test/resources/exception.properties diff --git a/spring-boot/src/test/resources/import.sql b/spring-boot-modules/spring-boot/src/test/resources/import.sql similarity index 100% rename from spring-boot/src/test/resources/import.sql rename to spring-boot-modules/spring-boot/src/test/resources/import.sql diff --git a/spring-boot/src/test/resources/logback-test.xml b/spring-boot-modules/spring-boot/src/test/resources/logback-test.xml similarity index 100% rename from spring-boot/src/test/resources/logback-test.xml rename to spring-boot-modules/spring-boot/src/test/resources/logback-test.xml diff --git a/spring-boot/src/test/resources/org/baeldung/boot/expected.json b/spring-boot-modules/spring-boot/src/test/resources/org/baeldung/boot/expected.json similarity index 100% rename from spring-boot/src/test/resources/org/baeldung/boot/expected.json rename to spring-boot-modules/spring-boot/src/test/resources/org/baeldung/boot/expected.json diff --git a/spring-boot/.factorypath b/spring-boot/.factorypath deleted file mode 100644 index 22b8a1ce95..0000000000 --- a/spring-boot/.factorypath +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 4e6d877e4046f459eed9aaa728f57e9b141966f6 Mon Sep 17 00:00:00 2001 From: mikr Date: Tue, 4 Feb 2020 09:24:55 +0100 Subject: [PATCH 17/20] BAEL-20869 Move remaining spring boot modules (update several pom files) --- .../src/main/js/application/src/index.html | 2 +- spring-boot-modules/spring-boot-property-exp/pom.xml | 4 ++-- .../property-exp-custom-config/pom.xml | 2 +- .../spring-boot-runtime/disabling-console-jul/pom.xml | 6 +++--- .../spring-boot-runtime/disabling-console-log4j2/pom.xml | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html index 903a7095b3..398190f439 100644 --- a/spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html +++ b/spring-boot-modules/spring-boot-angular/src/main/js/application/src/index.html @@ -7,7 +7,7 @@ - + diff --git a/spring-boot-modules/spring-boot-property-exp/pom.xml b/spring-boot-modules/spring-boot-property-exp/pom.xml index b16fcd1c22..2da25fca31 100644 --- a/spring-boot-modules/spring-boot-property-exp/pom.xml +++ b/spring-boot-modules/spring-boot-property-exp/pom.xml @@ -8,8 +8,8 @@ pom - com.baeldung - parent-modules + com.baeldung.spring-boot-modules + spring-boot-modules 1.0.0-SNAPSHOT diff --git a/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/pom.xml b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/pom.xml index 0118de7396..8ea9c8366d 100644 --- a/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/pom.xml +++ b/spring-boot-modules/spring-boot-property-exp/property-exp-custom-config/pom.xml @@ -8,7 +8,7 @@ jar - com.baeldung + com.baeldung.spring-boot-modules spring-boot-property-exp 0.0.1-SNAPSHOT diff --git a/spring-boot-modules/spring-boot-runtime/disabling-console-jul/pom.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/pom.xml index 2dc1a834b6..2f1c9c2add 100644 --- a/spring-boot-modules/spring-boot-runtime/disabling-console-jul/pom.xml +++ b/spring-boot-modules/spring-boot-runtime/disabling-console-jul/pom.xml @@ -7,9 +7,9 @@ - org.springframework.boot - spring-boot-starter-parent - 2.1.1.RELEASE + com.baeldung + spring-boot-runtime + 0.0.1-SNAPSHOT diff --git a/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/pom.xml b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/pom.xml index b743c4bdac..35f54999ec 100644 --- a/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/pom.xml +++ b/spring-boot-modules/spring-boot-runtime/disabling-console-log4j2/pom.xml @@ -7,9 +7,9 @@ - org.springframework.boot - spring-boot-starter-parent - 2.1.1.RELEASE + com.baeldung + spring-boot-runtime + 0.0.1-SNAPSHOT From fe75696a5e2be7eb4f0b4bcb49728af2ed0eb403 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Wed, 5 Feb 2020 07:41:11 +0100 Subject: [PATCH 18/20] BAEL-3800: Upgrade de.codecentric dependencies (#8666) --- spring-boot-modules/spring-boot-admin/pom.xml | 4 ---- .../spring-boot-admin/spring-boot-admin-client/pom.xml | 2 +- .../spring-boot-admin/spring-boot-admin-server/pom.xml | 4 ++-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/spring-boot-modules/spring-boot-admin/pom.xml b/spring-boot-modules/spring-boot-admin/pom.xml index 817d4ad00c..f7dc98770a 100644 --- a/spring-boot-modules/spring-boot-admin/pom.xml +++ b/spring-boot-modules/spring-boot-admin/pom.xml @@ -19,8 +19,4 @@ spring-boot-admin-client
- - 2.1.9.RELEASE - - diff --git a/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml b/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml index 996bf424f4..8bb8c7bac3 100644 --- a/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml +++ b/spring-boot-modules/spring-boot-admin/spring-boot-admin-client/pom.xml @@ -58,7 +58,7 @@
- 2.1.6 + 2.2.2 2.0.4.RELEASE diff --git a/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml b/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml index 8ab9291c0c..118b270812 100644 --- a/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml +++ b/spring-boot-modules/spring-boot-admin/spring-boot-admin-server/pom.xml @@ -79,8 +79,8 @@ - 2.1.6 - 2.1.6 + 2.2.2 + 2.2.2 1.5.7 2.0.4.RELEASE From 8047fc333a0c1da70d212337abc3e03e85f91bcf Mon Sep 17 00:00:00 2001 From: kwoyke Date: Wed, 5 Feb 2020 07:42:43 +0100 Subject: [PATCH 19/20] BAEL-3805: Fix project's dependencies (#8662) --- testing-modules/rest-assured/pom.xml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml index 1891ef9680..0b027312d6 100644 --- a/testing-modules/rest-assured/pom.xml +++ b/testing-modules/rest-assured/pom.xml @@ -147,16 +147,6 @@ wiremock ${wiremock.version} - - com.github.fge - json-schema-validator - ${github-json-schema-validator.version} - - - com.github.fge - json-schema-core - ${json-schema-core.version} - commons-collections commons-collections @@ -208,15 +198,7 @@ 2.4.7 2.4.1 - 2.2.6 - 1.2.5 - - 3.0.1 - 3.0.1 - 2.5.3 - - 2.1.9.RELEASE From a51dd49517abe9bc134d6cce8dd50f944d3a9b01 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Thu, 6 Feb 2020 08:37:19 +0530 Subject: [PATCH 20/20] BAEL-3459: Introduction to cache2k (#8651) --- libraries-3/pom.xml | 8 ++- .../com/baeldung/cache2k/ProductHelper.java | 41 ++++++++++++++++ .../cache2k/ProductHelperUsingLoader.java | 41 ++++++++++++++++ .../ProductHelperWithEventListener.java | 49 +++++++++++++++++++ .../cache2k/ProductHelperWithExpiry.java | 43 ++++++++++++++++ .../cache2k/ProductHelperUnitTest.java | 17 +++++++ .../ProductHelperUsingLoaderUnitTest.java | 17 +++++++ ...roductHelperWithEventListenerUnitTest.java | 16 ++++++ .../ProductHelperWithExpiryUnitTest.java | 18 +++++++ 9 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java create mode 100644 libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java create mode 100644 libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java create mode 100644 libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java create mode 100644 libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java create mode 100644 libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java create mode 100644 libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java create mode 100644 libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml index 2cfebd57ce..1dbe6b2435 100644 --- a/libraries-3/pom.xml +++ b/libraries-3/pom.xml @@ -67,7 +67,12 @@ org.cactoos cactoos ${cactoos.version} - + + + org.cache2k + cache2k-base-bom + ${cache2k.version} + pom @@ -88,5 +93,6 @@ 0.43 2.7.2 + 1.2.3.Final diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java new file mode 100644 index 0000000000..dc984e5f0b --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java @@ -0,0 +1,41 @@ +package com.baeldung.cache2k; + +import java.util.Objects; + +import org.cache2k.Cache; +import org.cache2k.Cache2kBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProductHelper { + + final Logger LOGGER = LoggerFactory.getLogger(ProductHelper.class); + + private Cache cachedDiscounts; + + public ProductHelper() { + cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) + .name("discount") + .eternal(true) + .entryCapacity(100) + .build(); + + initDiscountCache("Sports", 20); + } + + public void initDiscountCache(String productType, Integer value) { + cachedDiscounts.put(productType, value); + } + + public Integer getDiscount(String productType) { + Integer discount = cachedDiscounts.get(productType); + if (Objects.isNull(discount)) { + LOGGER.info("Discount for {} not found.", productType); + discount = 0; + } else { + LOGGER.info("Discount for {} found.", productType); + } + return discount; + } + +} diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java new file mode 100644 index 0000000000..787a78cd36 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java @@ -0,0 +1,41 @@ +package com.baeldung.cache2k; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import org.cache2k.Cache; +import org.cache2k.Cache2kBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProductHelperUsingLoader { + + final Logger LOGGER = LoggerFactory.getLogger(ProductHelperUsingLoader.class); + + private Cache cachedDiscounts; + + public ProductHelperUsingLoader() { + cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) + .name("discount-loader") + .eternal(false) + .expireAfterWrite(10, TimeUnit.MILLISECONDS) + .entryCapacity(100) + .loader((key) -> { + LOGGER.info("Calculating discount for {}.", key); + return "Sports".equalsIgnoreCase(key) ? 20 : 10; + }) + .build(); + } + + public Integer getDiscount(String productType) { + Integer discount = cachedDiscounts.get(productType); + if (Objects.isNull(discount)) { + LOGGER.info("Discount for {} not found.", productType); + discount = 0; + } else { + LOGGER.info("Discount for {} found.", productType); + } + return discount; + } + +} diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java new file mode 100644 index 0000000000..5b9eb28c68 --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java @@ -0,0 +1,49 @@ +package com.baeldung.cache2k; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import org.cache2k.Cache; +import org.cache2k.Cache2kBuilder; +import org.cache2k.CacheEntry; +import org.cache2k.event.CacheEntryCreatedListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProductHelperWithEventListener { + + final Logger LOGGER = LoggerFactory.getLogger(ProductHelperWithEventListener.class); + + private Cache cachedDiscounts; + + public ProductHelperWithEventListener() { + cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) + .name("discount-listener") + .eternal(false) + .expireAfterWrite(10, TimeUnit.MILLISECONDS) + .entryCapacity(100) + .loader((key) -> { + LOGGER.info("Calculating discount for {}.", key); + return "Sports".equalsIgnoreCase(key) ? 20 : 10; + }) + .addListener(new CacheEntryCreatedListener() { + @Override + public void onEntryCreated(Cache cache, CacheEntry entry) { + LOGGER.info("Entry created: [{}, {}].", entry.getKey(), entry.getValue()); + } + }) + .build(); + } + + public Integer getDiscount(String productType) { + Integer discount = cachedDiscounts.get(productType); + if (Objects.isNull(discount)) { + LOGGER.info("Discount for {} not found.", productType); + discount = 0; + } else { + LOGGER.info("Discount for {} found.", productType); + } + return discount; + } + +} diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java new file mode 100644 index 0000000000..b0bf8f90de --- /dev/null +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java @@ -0,0 +1,43 @@ +package com.baeldung.cache2k; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import org.cache2k.Cache; +import org.cache2k.Cache2kBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProductHelperWithExpiry { + + final Logger LOGGER = LoggerFactory.getLogger(ProductHelperWithExpiry.class); + + private Cache cachedDiscounts; + + public ProductHelperWithExpiry() { + cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) + .name("discount-expiry") + .eternal(false) + .expireAfterWrite(5, TimeUnit.MILLISECONDS) + .entryCapacity(100) + .build(); + + initDiscountCache("Sports", 20); + } + + public void initDiscountCache(String productType, Integer value) { + cachedDiscounts.put(productType, value); + } + + public Integer getDiscount(String productType) { + Integer discount = cachedDiscounts.get(productType); + if (Objects.isNull(discount)) { + LOGGER.info("Discount for {} not found.", productType); + discount = 0; + } else { + LOGGER.info("Discount for {} found.", productType); + } + return discount; + } + +} diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java new file mode 100644 index 0000000000..69da2591dd --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.cache2k; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class ProductHelperUnitTest { + + ProductHelper productHelper = new ProductHelper(); + + @Test + public void whenInvokedGetDiscount_thenGetItFromCache() { + assertTrue(productHelper.getDiscount("Sports") == 20); + assertTrue(productHelper.getDiscount("Electronics") == 0); + } + +} diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java new file mode 100644 index 0000000000..2656e75cab --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.cache2k; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class ProductHelperUsingLoaderUnitTest { + + ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader(); + + @Test + public void whenInvokedGetDiscount_thenPopulateCache() { + assertTrue(productHelper.getDiscount("Sports") == 20); + assertTrue(productHelper.getDiscount("Electronics") == 10); + } + +} diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java new file mode 100644 index 0000000000..7bf08232f4 --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java @@ -0,0 +1,16 @@ +package com.baeldung.cache2k; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class ProductHelperWithEventListenerUnitTest { + + ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener(); + + @Test + public void whenEntryAddedInCache_thenEventListenerCalled() { + assertTrue(productHelper.getDiscount("Sports") == 20); + } + +} diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java new file mode 100644 index 0000000000..65feba2c70 --- /dev/null +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java @@ -0,0 +1,18 @@ +package com.baeldung.cache2k; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class ProductHelperWithExpiryUnitTest { + + ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry(); + + @Test + public void whenInvokedGetDiscountForExpiredProduct_thenNoDiscount() throws InterruptedException { + assertTrue(productHelper.getDiscount("Sports") == 20); + Thread.sleep(20); + assertTrue(productHelper.getDiscount("Sports") == 0); + } + +}
-

System properties sample Insights

-

Built with Microprofile on Open Liberty

- - -
- - -
+

System properties sample Insights

+

Built with Microprofile on Open Liberty

+ + +
+ + +