");
}
- @Ignore
@Test
public void whenUsedWithMustacheStyle_ThenContextChanges() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -43,10 +40,9 @@ public class BuiltinHelperUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("\n
I live in World
\n");
+ assertThat(templateString).contains("
I live in World
");
}
- @Ignore
@Test
public void whenUsedEach_ThenIterates() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -59,11 +55,10 @@ public class BuiltinHelperUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("\nJava is my friend.\n"
- + "\nSpring is my friend.\n");
+ assertThat(templateString)
+ .contains("Java is my friend.", "Spring is my friend.");
}
- @Ignore
@Test
public void whenUsedEachMustacheStyle_ThenIterates() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -76,11 +71,10 @@ public class BuiltinHelperUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("\nJava is my friend.\n"
- + "\nSpring is my friend.\n");
+ assertThat(templateString)
+ .contains("Java is my friend.", "Spring is my friend.");
}
- @Ignore
@Test
public void whenUsedIf_ThenPutsCondition() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -90,10 +84,9 @@ public class BuiltinHelperUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("\n
Baeldung is busy.
\n");
+ assertThat(templateString).contains("
Baeldung is busy.
");
}
- @Ignore
@Test
public void whenUsedIfMustacheStyle_ThenPutsCondition() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -103,7 +96,7 @@ public class BuiltinHelperUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("\n
Baeldung is busy.
\n");
+ assertThat(templateString).contains("
Baeldung is busy.
");
}
private Person getPerson(String name) {
diff --git a/libraries-2/src/test/java/com/baeldung/handlebars/ReusingTemplatesUnitTest.java b/libraries-2/src/test/java/com/baeldung/handlebars/ReusingTemplatesUnitTest.java
index 56449f59e4..376e44e4bd 100644
--- a/libraries-2/src/test/java/com/baeldung/handlebars/ReusingTemplatesUnitTest.java
+++ b/libraries-2/src/test/java/com/baeldung/handlebars/ReusingTemplatesUnitTest.java
@@ -1,15 +1,14 @@
package com.baeldung.handlebars;
-import static org.assertj.core.api.Assertions.assertThat;
-
import com.github.jknack.handlebars.Handlebars;
import com.github.jknack.handlebars.Template;
import com.github.jknack.handlebars.io.ClassPathTemplateLoader;
import com.github.jknack.handlebars.io.TemplateLoader;
+import org.junit.Test;
+
import java.io.IOException;
-import org.junit.Ignore;
-import org.junit.Test;
+import static org.assertj.core.api.Assertions.assertThat;
/**
* Showcases reusing the existing templates.
@@ -20,7 +19,6 @@ public class ReusingTemplatesUnitTest {
private TemplateLoader templateLoader = new ClassPathTemplateLoader("/handlebars", ".html");
- @Ignore
@Test
public void whenOtherTemplateIsReferenced_ThenCanReuse() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -30,10 +28,10 @@ public class ReusingTemplatesUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("
Hi Baeldung!
\n
This is the page Baeldung
");
+ assertThat(templateString)
+ .contains("
Hi Baeldung!
", "
This is the page Baeldung
");
}
- @Ignore
@Test
public void whenBlockIsDefined_ThenCanOverrideWithPartial() throws IOException {
Handlebars handlebars = new Handlebars(templateLoader);
@@ -43,11 +41,11 @@ public class ReusingTemplatesUnitTest {
String templateString = template.apply(person);
- assertThat(templateString).isEqualTo("\n\n"
- + "\n"
- + "\n This is the intro\n\n"
- + "\n Hi there!\n\n"
- + "\n"
- + "");
+ assertThat(templateString).contains("",
+ "",
+ "This is the intro",
+ "Hi there!",
+ "",
+ "");
}
}
diff --git a/libraries-3/README.md b/libraries-3/README.md
index a9d48bb389..942f108afd 100644
--- a/libraries-3/README.md
+++ b/libraries-3/README.md
@@ -9,3 +9,5 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
### Relevant Articles:
- [Parsing Command-Line Parameters with JCommander](https://www.baeldung.com/jcommander-parsing-command-line-parameters)
+- [Guide to the Cactoos Library](https://www.baeldung.com/java-cactoos)
+- [Parsing Command-Line Parameters with Airline](https://www.baeldung.com/java-airline)
diff --git a/libraries-3/pom.xml b/libraries-3/pom.xml
index 1dbe6b2435..66b48733f2 100644
--- a/libraries-3/pom.xml
+++ b/libraries-3/pom.xml
@@ -24,7 +24,6 @@
lombok${lombok.version}
-
org.springframework.bootspring-boot-starter-web
diff --git a/libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java
new file mode 100644
index 0000000000..836ac86339
--- /dev/null
+++ b/libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java
@@ -0,0 +1,90 @@
+package com.baeldung.libraries.snakeyaml;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.yaml.snakeyaml.Yaml;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+public class MultiLineStringsUnitTest {
+
+ private Yaml yaml;
+
+ @Before
+ public void setup() {
+ yaml = new Yaml();
+ }
+
+ @Test
+ public void whenLiteral_ThenLineBreaksArePresent() {
+ String key = parseYamlKey("literal.yaml", "key");
+ assertEquals("Line1\nLine2\nLine3", key);
+ }
+
+ @Test
+ public void whenLiteral_ThenEndingBreaksAreReducedToOne() {
+ String key = parseYamlKey("literal2.yaml", "key");
+ assertEquals("\n\nLine1\n\nLine2\n\nLine3\n", key);
+ }
+
+ @Test
+ public void whenFolded_ThenLineBreaksAreReplaced() {
+ String key = parseYamlKey("folded.yaml", "key");
+ assertEquals("Line1 Line2 Line3", key);
+ }
+
+ @Test
+ public void whenFolded_ThenEmptyLinesAreReducedToOne() {
+ String key = parseYamlKey("folded2.yaml", "key");
+ assertEquals("Line1 Line2\n\nLine3\n", key);
+ }
+
+ @Test
+ public void whenLiteralKeep_ThenLastEmptyLinesArePresent() {
+ String key = parseYamlKey("literal_keep.yaml", "key");
+ assertEquals("Line1\nLine2\nLine3\n\n", key);
+ }
+
+ @Test
+ public void whenLiteralStrip_ThenLastEmptyLinesAreRemoved() {
+ String key = parseYamlKey("literal_strip.yaml", "key");
+ assertEquals("Line1\nLine2\nLine3", key);
+ }
+
+ @Test
+ public void whenFoldedKeep_ThenLastEmptyLinesArePresent() {
+ String key = parseYamlKey("folded_keep.yaml", "key");
+ assertEquals("Line1 Line2 Line3\n\n\n", key);
+ }
+
+ @Test
+ public void whenFoldedStrip_ThenLastEmptyLinesAreRemoved() {
+ String key = parseYamlKey("folded_strip.yaml", "key");
+ assertEquals("Line1 Line2 Line3", key);
+ }
+
+ @Test
+ public void whenDoubleQuotes_ThenExplicitBreaksArePreserved() {
+ String key = parseYamlKey("plain_double_quotes.yaml", "key");
+ assertEquals("Line1\nLine2\nLine3", key);
+ }
+
+ @Test
+ public void whenSingleQuotes_ThenExplicitBreaksAreIgnored() {
+ String key = parseYamlKey("plain_single_quotes.yaml", "key");
+ assertEquals("Line1\\nLine2\nLine3", key);
+ }
+
+ String parseYamlKey(String fileName, String key) {
+ InputStream inputStream = this.getClass()
+ .getClassLoader()
+ .getResourceAsStream("yaml" + File.separator + "multiline" + File.separator + fileName);
+ Map parsed = yaml.load(inputStream);
+ return parsed.get(key);
+ }
+
+}
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded.yaml
new file mode 100644
index 0000000000..c5fa743a08
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/folded.yaml
@@ -0,0 +1,4 @@
+key: >
+ Line1
+ Line2
+ Line3
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml
new file mode 100644
index 0000000000..735abf9b2f
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml
@@ -0,0 +1,8 @@
+key: >
+ Line1
+ Line2
+
+
+ Line3
+
+
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml
new file mode 100644
index 0000000000..555291fd26
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml
@@ -0,0 +1,6 @@
+key: >+
+ Line1
+ Line2
+ Line3
+
+
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml
new file mode 100644
index 0000000000..0a3a246dc2
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml
@@ -0,0 +1,7 @@
+key: >-
+ Line1
+ Line2
+ Line3
+
+
+
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal.yaml
new file mode 100644
index 0000000000..7e02501a33
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/literal.yaml
@@ -0,0 +1,4 @@
+key: |
+ Line1
+ Line2
+ Line3
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml
new file mode 100644
index 0000000000..7c7fed0163
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml
@@ -0,0 +1,10 @@
+key: |
+
+
+ Line1
+
+ Line2
+
+ Line3
+
+
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml
new file mode 100644
index 0000000000..37f22684dd
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml
@@ -0,0 +1,5 @@
+key: |+
+ Line1
+ Line2
+ Line3
+
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml
new file mode 100644
index 0000000000..0791e13d5d
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml
@@ -0,0 +1,5 @@
+key: |-
+ Line1
+ Line2
+ Line3
+
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml b/libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml
new file mode 100644
index 0000000000..ccab040a27
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml
@@ -0,0 +1 @@
+key: "Line1\nLine2\nLine3"
\ No newline at end of file
diff --git a/libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml b/libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml
new file mode 100644
index 0000000000..acbf35a462
--- /dev/null
+++ b/libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml
@@ -0,0 +1,3 @@
+key: 'Line1\nLine2
+
+ Line3'
\ No newline at end of file
diff --git a/libraries-http/README.md b/libraries-http/README.md
index 4c27ec1c8d..1f065a9d4a 100644
--- a/libraries-http/README.md
+++ b/libraries-http/README.md
@@ -13,3 +13,4 @@ This module contains articles about HTTP libraries.
- [A Guide to Unirest](https://www.baeldung.com/unirest)
- [Creating REST Microservices with Javalin](https://www.baeldung.com/javalin-rest-microservices)
- [A Quick Guide to Timeouts in OkHttp](https://www.baeldung.com/okhttp-timeouts)
+- [A Quick Guide to Post Requests with OkHttp](https://www.baeldung.com/okhttp-post)
diff --git a/logging-modules/logback/README.md b/logging-modules/logback/README.md
index 58dc8ce541..05a4ab9308 100644
--- a/logging-modules/logback/README.md
+++ b/logging-modules/logback/README.md
@@ -2,3 +2,4 @@
- [Get Log Output in JSON](https://www.baeldung.com/java-log-json-output)
- [SLF4J Warning: Class Path Contains Multiple SLF4J Bindings](https://www.baeldung.com/slf4j-classpath-multiple-bindings)
+- [Sending Emails with Logback](https://www.baeldung.com/logback-send-email)
diff --git a/maven-all/maven/proxy/README.md b/maven-all/maven/proxy/README.md
new file mode 100644
index 0000000000..9ae1fd6ad5
--- /dev/null
+++ b/maven-all/maven/proxy/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+
+- [Using Maven Behind a Proxy](https://www.baeldung.com/maven-behind-proxy)
diff --git a/ninja/README.md b/ninja/README.md
new file mode 100644
index 0000000000..554d088c1b
--- /dev/null
+++ b/ninja/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles
+
+- [Introduction to Ninja Framework](https://www.baeldung.com/ninja-framework-intro)
diff --git a/parent-spring-4/pom.xml b/parent-spring-4/pom.xml
index 671ca7db6b..3749c5016e 100644
--- a/parent-spring-4/pom.xml
+++ b/parent-spring-4/pom.xml
@@ -51,7 +51,7 @@
- 4.3.25.RELEASE
+ 4.3.26.RELEASE1.6.1
diff --git a/persistence-modules/hbase/README.md b/persistence-modules/hbase/README.md
index df2683b27a..ea76c4ec4b 100644
--- a/persistence-modules/hbase/README.md
+++ b/persistence-modules/hbase/README.md
@@ -1,3 +1,3 @@
### Relevant articles
-- [HBase with Java](http://www.baeldung.com/hbase)
+- [HBase with Java](https://www.baeldung.com/hbase)
diff --git a/persistence-modules/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HBaseClientOperations.java
similarity index 99%
rename from persistence-modules/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java
rename to persistence-modules/hbase/src/main/java/com/baeldung/hbase/HBaseClientOperations.java
index c78eacc834..f889e2eb56 100644
--- a/persistence-modules/hbase/src/main/java/org/baeldung/hbase/HBaseClientOperations.java
+++ b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HBaseClientOperations.java
@@ -1,4 +1,4 @@
-package org.baeldung.hbase;
+package com.baeldung.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HColumnDescriptor;
diff --git a/persistence-modules/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java
similarity index 97%
rename from persistence-modules/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java
rename to persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java
index 07cb7df480..5546f15e36 100644
--- a/persistence-modules/hbase/src/main/java/org/baeldung/hbase/HbaseClientExample.java
+++ b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java
@@ -1,4 +1,4 @@
-package org.baeldung.hbase;
+package com.baeldung.hbase;
import com.google.protobuf.ServiceException;
diff --git a/persistence-modules/hibernate5-2/README.md b/persistence-modules/hibernate5-2/README.md
index d409f99a3a..330708f6d3 100644
--- a/persistence-modules/hibernate5-2/README.md
+++ b/persistence-modules/hibernate5-2/README.md
@@ -7,4 +7,5 @@ This module contains articles about Hibernate 5.
- [FetchMode in Spring Data JPA](https://www.baeldung.com/spring-data-jpa-fetchmode)
- [JPA/Hibernate Persistence Context](https://www.baeldung.com/jpa-hibernate-persistence-context)
- [FetchMode in Hibernate](https://www.baeldung.com/hibernate-fetchmode)
+- [Various Logging Levels in Hibernate](https://www.baeldung.com/hibernate-logging-levels)
- [[<-- Prev]](/hibernate5)
diff --git a/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java b/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java
index b3f01be566..62ab13563a 100644
--- a/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java
+++ b/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java
@@ -1,111 +1,111 @@
-package com.baeldung.aggregation;
-
-import static com.mongodb.client.model.Aggregates.count;
-import static com.mongodb.client.model.Aggregates.group;
-import static com.mongodb.client.model.Aggregates.limit;
-import static com.mongodb.client.model.Aggregates.match;
-import static com.mongodb.client.model.Aggregates.out;
-import static com.mongodb.client.model.Aggregates.project;
-import static com.mongodb.client.model.Aggregates.sort;
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Arrays;
-
-import org.bson.Document;
-import org.bson.conversions.Bson;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import com.mongodb.client.MongoClient;
-import com.mongodb.client.MongoClients;
-import com.mongodb.client.MongoCollection;
-import com.mongodb.client.MongoDatabase;
-import com.mongodb.client.model.Accumulators;
-import com.mongodb.client.model.Filters;
-import com.mongodb.client.model.Projections;
-import com.mongodb.client.model.Sorts;
-
-public class AggregationLiveTest {
-
- private static final String DATABASE = "world";
- private static final String COLLECTION = "countries";
- private static final String DATASET_JSON = "/countrydata.json";
- private static MongoClient mongoClient;
- private static MongoDatabase database;
- private static MongoCollection collection;
-
- @BeforeClass
- public static void setUpDB() throws IOException {
- mongoClient = MongoClients.create();
- database = mongoClient.getDatabase(DATABASE);
- collection = database.getCollection(COLLECTION);
-
- collection.drop();
-
- InputStream is = AggregationLiveTest.class.getResourceAsStream(DATASET_JSON);
- BufferedReader reader = new BufferedReader(new InputStreamReader(is));
- reader.lines()
- .forEach(line -> collection.insertOne(Document.parse(line)));
- reader.close();
- }
-
- @Test
- public void givenCountryCollection_whenNAFTACountriesCounted_thenThree() {
- Document naftaCountries = collection.aggregate(Arrays.asList(match(Filters.eq("regionalBlocs.acronym", "NAFTA")), count()))
- .first();
-
- assertEquals(3, naftaCountries.get("count"));
- }
-
- @Test
- public void givenCountryCollection_whenAreaSortedDescending_thenSuccess() {
-
- collection.aggregate(Arrays.asList(sort(Sorts.descending("area")), limit(7), out("largest_seven")))
- .toCollection();
-
- MongoCollection largestSeven = database.getCollection("largest_seven");
-
- assertEquals(7, largestSeven.countDocuments());
-
- Document usa = largestSeven.find(Filters.eq("alpha3Code", "USA"))
- .first();
-
- assertNotNull(usa);
- }
-
- @Test
- public void givenCountryCollection_whenCountedRegionWise_thenMaxInAfrica() {
- Document maxCountriedRegion = collection.aggregate(Arrays.asList(group("$region", Accumulators.sum("tally", 1)), sort(Sorts.descending("tally"))))
- .first();
- assertTrue(maxCountriedRegion.containsValue("Africa"));
- }
-
- @Test
- public void givenCountryCollection_whenNeighborsCalculated_thenMaxIsFifteenInChina() {
- Bson borderingCountriesCollection = project(Projections.fields(Projections.excludeId(), Projections.include("name"), Projections.computed("borderingCountries", Projections.computed("$size", "$borders"))));
-
- int maxValue = collection.aggregate(Arrays.asList(borderingCountriesCollection, group(null, Accumulators.max("max", "$borderingCountries"))))
- .first()
- .getInteger("max");
-
- assertEquals(15, maxValue);
-
- Document maxNeighboredCountry = collection.aggregate(Arrays.asList(borderingCountriesCollection, match(Filters.eq("borderingCountries", maxValue))))
- .first();
- assertTrue(maxNeighboredCountry.containsValue("China"));
-
- }
-
- @AfterClass
- public static void cleanUp() {
- mongoClient.close();
- }
-
-}
+package com.baeldung.aggregation;
+
+import static com.mongodb.client.model.Aggregates.count;
+import static com.mongodb.client.model.Aggregates.group;
+import static com.mongodb.client.model.Aggregates.limit;
+import static com.mongodb.client.model.Aggregates.match;
+import static com.mongodb.client.model.Aggregates.out;
+import static com.mongodb.client.model.Aggregates.project;
+import static com.mongodb.client.model.Aggregates.sort;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+
+import org.bson.Document;
+import org.bson.conversions.Bson;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.mongodb.client.MongoClient;
+import com.mongodb.client.MongoClients;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoDatabase;
+import com.mongodb.client.model.Accumulators;
+import com.mongodb.client.model.Filters;
+import com.mongodb.client.model.Projections;
+import com.mongodb.client.model.Sorts;
+
+public class AggregationLiveTest {
+
+ private static final String DATABASE = "world";
+ private static final String COLLECTION = "countries";
+ private static final String DATASET_JSON = "/countrydata.json";
+ private static MongoClient mongoClient;
+ private static MongoDatabase database;
+ private static MongoCollection collection;
+
+ @BeforeClass
+ public static void setUpDB() throws IOException {
+ mongoClient = MongoClients.create();
+ database = mongoClient.getDatabase(DATABASE);
+ collection = database.getCollection(COLLECTION);
+
+ collection.drop();
+
+ InputStream is = AggregationLiveTest.class.getResourceAsStream(DATASET_JSON);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+ reader.lines()
+ .forEach(line -> collection.insertOne(Document.parse(line)));
+ reader.close();
+ }
+
+ @Test
+ public void givenCountryCollection_whenEnglishSpeakingCountriesCounted_thenNinetyOne() {
+ Document englishSpeakingCountries = collection.aggregate(Arrays.asList(match(Filters.eq("languages.name", "English")), count()))
+ .first();
+
+ assertEquals(91, englishSpeakingCountries.get("count"));
+ }
+
+ @Test
+ public void givenCountryCollection_whenAreaSortedDescending_thenSuccess() {
+
+ collection.aggregate(Arrays.asList(sort(Sorts.descending("area")), limit(7), out("largest_seven")))
+ .toCollection();
+
+ MongoCollection largestSeven = database.getCollection("largest_seven");
+
+ assertEquals(7, largestSeven.countDocuments());
+
+ Document usa = largestSeven.find(Filters.eq("alpha3Code", "USA"))
+ .first();
+
+ assertNotNull(usa);
+ }
+
+ @Test
+ public void givenCountryCollection_whenCountedRegionWise_thenMaxInAfrica() {
+ Document maxCountriedRegion = collection.aggregate(Arrays.asList(group("$region", Accumulators.sum("tally", 1)), sort(Sorts.descending("tally"))))
+ .first();
+ assertTrue(maxCountriedRegion.containsValue("Africa"));
+ }
+
+ @Test
+ public void givenCountryCollection_whenNeighborsCalculated_thenMaxIsFifteenInChina() {
+ Bson borderingCountriesCollection = project(Projections.fields(Projections.excludeId(), Projections.include("name"), Projections.computed("borderingCountries", Projections.computed("$size", "$borders"))));
+
+ int maxValue = collection.aggregate(Arrays.asList(borderingCountriesCollection, group(null, Accumulators.max("max", "$borderingCountries"))))
+ .first()
+ .getInteger("max");
+
+ assertEquals(15, maxValue);
+
+ Document maxNeighboredCountry = collection.aggregate(Arrays.asList(borderingCountriesCollection, match(Filters.eq("borderingCountries", maxValue))))
+ .first();
+ assertTrue(maxNeighboredCountry.containsValue("China"));
+
+ }
+
+ @AfterClass
+ public static void cleanUp() {
+ mongoClient.close();
+ }
+
+}
diff --git a/persistence-modules/querydsl/README.md b/persistence-modules/querydsl/README.md
index 77b9fd6baf..03e113795d 100644
--- a/persistence-modules/querydsl/README.md
+++ b/persistence-modules/querydsl/README.md
@@ -1,3 +1,3 @@
### Relevant Articles:
-- [Intro to Querydsl](http://www.baeldung.com/intro-to-querydsl)
-- [A Guide to Querydsl with JPA](http://www.baeldung.com/querydsl-with-jpa-tutorial)
+- [Intro to Querydsl](https://www.baeldung.com/intro-to-querydsl)
+- [A Guide to Querydsl with JPA](https://www.baeldung.com/querydsl-with-jpa-tutorial)
diff --git a/persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDao.java b/persistence-modules/querydsl/src/main/java/com/baeldung/dao/PersonDao.java
similarity index 88%
rename from persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDao.java
rename to persistence-modules/querydsl/src/main/java/com/baeldung/dao/PersonDao.java
index 7df4ebb22d..fb39821981 100644
--- a/persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDao.java
+++ b/persistence-modules/querydsl/src/main/java/com/baeldung/dao/PersonDao.java
@@ -1,9 +1,9 @@
-package org.baeldung.dao;
+package com.baeldung.dao;
import java.util.List;
import java.util.Map;
-import org.baeldung.entity.Person;
+import com.baeldung.entity.Person;
public interface PersonDao {
diff --git a/persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java b/persistence-modules/querydsl/src/main/java/com/baeldung/dao/PersonDaoImpl.java
similarity index 95%
rename from persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java
rename to persistence-modules/querydsl/src/main/java/com/baeldung/dao/PersonDaoImpl.java
index 9acaf1dd18..20ebe0e3fe 100644
--- a/persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java
+++ b/persistence-modules/querydsl/src/main/java/com/baeldung/dao/PersonDaoImpl.java
@@ -1,17 +1,15 @@
-package org.baeldung.dao;
+package com.baeldung.dao;
-import java.util.List;
-import java.util.Map;
+import com.baeldung.entity.Person;
+import com.baeldung.entity.QPerson;
+import com.querydsl.core.group.GroupBy;
+import com.querydsl.jpa.impl.JPAQuery;
+import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
-
-import org.baeldung.entity.Person;
-import org.baeldung.entity.QPerson;
-import org.springframework.stereotype.Repository;
-
-import com.querydsl.core.group.GroupBy;
-import com.querydsl.jpa.impl.JPAQuery;
+import java.util.List;
+import java.util.Map;
@Repository
public class PersonDaoImpl implements PersonDao {
diff --git a/persistence-modules/querydsl/src/main/java/org/baeldung/entity/Person.java b/persistence-modules/querydsl/src/main/java/com/baeldung/entity/Person.java
similarity index 97%
rename from persistence-modules/querydsl/src/main/java/org/baeldung/entity/Person.java
rename to persistence-modules/querydsl/src/main/java/com/baeldung/entity/Person.java
index 6f04210d90..310f21ab2a 100644
--- a/persistence-modules/querydsl/src/main/java/org/baeldung/entity/Person.java
+++ b/persistence-modules/querydsl/src/main/java/com/baeldung/entity/Person.java
@@ -1,4 +1,4 @@
-package org.baeldung.entity;
+package com.baeldung.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
diff --git a/persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java b/persistence-modules/querydsl/src/main/java/com/baeldung/querydsl/intro/entities/BlogPost.java
similarity index 95%
rename from persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java
rename to persistence-modules/querydsl/src/main/java/com/baeldung/querydsl/intro/entities/BlogPost.java
index 241bc50b03..6712ad08d5 100644
--- a/persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java
+++ b/persistence-modules/querydsl/src/main/java/com/baeldung/querydsl/intro/entities/BlogPost.java
@@ -1,7 +1,7 @@
/*
* (c) Центр ИТ, 2016. Все права защищены.
*/
-package org.baeldung.querydsl.intro.entities;
+package com.baeldung.querydsl.intro.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
diff --git a/persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java b/persistence-modules/querydsl/src/main/java/com/baeldung/querydsl/intro/entities/User.java
similarity index 95%
rename from persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java
rename to persistence-modules/querydsl/src/main/java/com/baeldung/querydsl/intro/entities/User.java
index c0681e15d1..4111284d5a 100644
--- a/persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java
+++ b/persistence-modules/querydsl/src/main/java/com/baeldung/querydsl/intro/entities/User.java
@@ -1,7 +1,7 @@
/*
* (c) Центр ИТ, 2016. Все права защищены.
*/
-package org.baeldung.querydsl.intro.entities;
+package com.baeldung.querydsl.intro.entities;
import java.util.HashSet;
import java.util.Set;
diff --git a/persistence-modules/querydsl/src/main/resources/META-INF/persistence.xml b/persistence-modules/querydsl/src/main/resources/META-INF/persistence.xml
index 2964382d48..4b51cb444b 100644
--- a/persistence-modules/querydsl/src/main/resources/META-INF/persistence.xml
+++ b/persistence-modules/querydsl/src/main/resources/META-INF/persistence.xml
@@ -17,7 +17,7 @@
-
+ org.hibernate.jpa.HibernatePersistenceProvider
diff --git a/persistence-modules/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java b/persistence-modules/querydsl/src/test/java/com/baeldung/dao/PersonDaoIntegrationTest.java
similarity index 97%
rename from persistence-modules/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java
rename to persistence-modules/querydsl/src/test/java/com/baeldung/dao/PersonDaoIntegrationTest.java
index a666aea8da..cf4e9ab872 100644
--- a/persistence-modules/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java
+++ b/persistence-modules/querydsl/src/test/java/com/baeldung/dao/PersonDaoIntegrationTest.java
@@ -1,8 +1,8 @@
-package org.baeldung.dao;
+package com.baeldung.dao;
import java.util.Map;
-import org.baeldung.entity.Person;
+import com.baeldung.entity.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/persistence-modules/querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java b/persistence-modules/querydsl/src/test/java/com/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
similarity index 94%
rename from persistence-modules/querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
rename to persistence-modules/querydsl/src/test/java/com/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
index 15a32b8df5..7ae97c2880 100644
--- a/persistence-modules/querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
+++ b/persistence-modules/querydsl/src/test/java/com/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
@@ -1,17 +1,17 @@
/*
* (c) Центр ИТ, 2016. Все права защищены.
*/
-package org.baeldung.querydsl.intro;
+package com.baeldung.querydsl.intro;
+import com.baeldung.querydsl.intro.entities.BlogPost;
+import com.baeldung.querydsl.intro.entities.QBlogPost;
+import com.baeldung.querydsl.intro.entities.QUser;
+import com.baeldung.querydsl.intro.entities.User;
import com.querydsl.core.Tuple;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.NumberPath;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
-import org.baeldung.querydsl.intro.entities.BlogPost;
-import org.baeldung.querydsl.intro.entities.QBlogPost;
-import org.baeldung.querydsl.intro.entities.QUser;
-import org.baeldung.querydsl.intro.entities.User;
import org.junit.*;
import javax.persistence.EntityManager;
@@ -31,7 +31,7 @@ public class QueryDSLIntegrationTest {
@BeforeClass
public static void populateDatabase() {
- emf = Persistence.createEntityManagerFactory("org.baeldung.querydsl.intro");
+ emf = Persistence.createEntityManagerFactory("com.baeldung.querydsl.intro");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
diff --git a/persistence-modules/querydsl/src/test/resources/test-context.xml b/persistence-modules/querydsl/src/test/resources/test-context.xml
index 13d823a857..1503364320 100644
--- a/persistence-modules/querydsl/src/test/resources/test-context.xml
+++ b/persistence-modules/querydsl/src/test/resources/test-context.xml
@@ -13,7 +13,7 @@
>
-
+
diff --git a/persistence-modules/r2dbc/pom.xml b/persistence-modules/r2dbc/pom.xml
index 2c06931487..55197ad560 100644
--- a/persistence-modules/r2dbc/pom.xml
+++ b/persistence-modules/r2dbc/pom.xml
@@ -3,7 +3,7 @@
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
- org.baeldung.examples.r2dbc
+ com.baeldung.examples.r2dbcr2dbc-example0.0.1-SNAPSHOTr2dbc-example
diff --git a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/Account.java b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/Account.java
similarity index 96%
rename from persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/Account.java
rename to persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/Account.java
index 65bf33168e..0310cd94b6 100644
--- a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/Account.java
+++ b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/Account.java
@@ -1,4 +1,4 @@
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
import java.math.BigDecimal;
diff --git a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/AccountResource.java b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/AccountResource.java
similarity index 87%
rename from persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/AccountResource.java
rename to persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/AccountResource.java
index 90816a7522..5b0d0cded3 100644
--- a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/AccountResource.java
+++ b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/AccountResource.java
@@ -1,12 +1,8 @@
/**
*
*/
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
-import java.math.BigDecimal;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
@@ -15,8 +11,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-import io.r2dbc.spi.Connection;
-import io.r2dbc.spi.ConnectionFactory;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
diff --git a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/DatasourceConfig.java b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/DatasourceConfig.java
similarity index 94%
rename from persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/DatasourceConfig.java
rename to persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/DatasourceConfig.java
index 5b695f39f5..21cc0bc6d3 100644
--- a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/DatasourceConfig.java
+++ b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/DatasourceConfig.java
@@ -1,16 +1,14 @@
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.util.StringUtils;
import io.netty.util.internal.StringUtil;
import io.r2dbc.spi.ConnectionFactories;
import io.r2dbc.spi.ConnectionFactory;
import io.r2dbc.spi.ConnectionFactoryOptions;
import io.r2dbc.spi.ConnectionFactoryOptions.Builder;
-import io.r2dbc.spi.Option;
import reactor.core.publisher.Flux;
import static io.r2dbc.spi.ConnectionFactoryOptions.*;
diff --git a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/R2DBCConfigurationProperties.java b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/R2DBCConfigurationProperties.java
similarity index 96%
rename from persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/R2DBCConfigurationProperties.java
rename to persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/R2DBCConfigurationProperties.java
index 02733ebed9..b40c7ec2cd 100644
--- a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/R2DBCConfigurationProperties.java
+++ b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/R2DBCConfigurationProperties.java
@@ -1,4 +1,4 @@
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
import javax.validation.constraints.NotEmpty;
diff --git a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/R2dbcExampleApplication.java b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/R2dbcExampleApplication.java
similarity index 92%
rename from persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/R2dbcExampleApplication.java
rename to persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/R2dbcExampleApplication.java
index 1147936e2d..11670a4154 100644
--- a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/R2dbcExampleApplication.java
+++ b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/R2dbcExampleApplication.java
@@ -1,4 +1,4 @@
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/ReactiveAccountDao.java b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/ReactiveAccountDao.java
similarity index 95%
rename from persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/ReactiveAccountDao.java
rename to persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/ReactiveAccountDao.java
index f9717d4b9b..6a7974aeb1 100644
--- a/persistence-modules/r2dbc/src/main/java/org/baeldung/examples/r2dbc/ReactiveAccountDao.java
+++ b/persistence-modules/r2dbc/src/main/java/com/baeldung/examples/r2dbc/ReactiveAccountDao.java
@@ -1,9 +1,7 @@
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
import java.math.BigDecimal;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import io.r2dbc.spi.Connection;
diff --git a/persistence-modules/r2dbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/persistence-modules/r2dbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index 55eb5659a7..79d401392c 100644
--- a/persistence-modules/r2dbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/persistence-modules/r2dbc/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -1,5 +1,5 @@
{"properties": [{
"name": "r2dbc",
- "type": "org.baeldung.examples.r2dbc.R2DBCConfigurationProperties",
+ "type": "com.baeldung.examples.r2dbc.R2DBCConfigurationProperties",
"description": "R2DBC Connection properties"
}]}
\ No newline at end of file
diff --git a/persistence-modules/r2dbc/src/test/java/org/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java b/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
similarity index 92%
rename from persistence-modules/r2dbc/src/test/java/org/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
rename to persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
index a1d433847b..3fb9e24a8e 100644
--- a/persistence-modules/r2dbc/src/test/java/org/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
+++ b/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
@@ -1,19 +1,15 @@
-package org.baeldung.examples.r2dbc;
+package com.baeldung.examples.r2dbc;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import java.util.List;
-import org.hamcrest.core.IsNull;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient;
diff --git a/persistence-modules/redis/README.md b/persistence-modules/redis/README.md
index 21cd048693..668b8d33f8 100644
--- a/persistence-modules/redis/README.md
+++ b/persistence-modules/redis/README.md
@@ -2,3 +2,4 @@
- [Intro to Jedis – the Java Redis Client Library](http://www.baeldung.com/jedis-java-redis-client-library)
- [A Guide to Redis with Redisson](http://www.baeldung.com/redis-redisson)
- [Introduction to Lettuce – the Java Redis Client](https://www.baeldung.com/java-redis-lettuce)
+- [List All Available Redis Keys](https://www.baeldung.com/redis-list-available-keys)
diff --git a/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java b/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java
index 2fe7a787e0..72ff42ff74 100644
--- a/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java
+++ b/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java
@@ -145,5 +145,10 @@ public class RedisClient {
log.error("Exception caught in flushAll", ex);
}
}
+
+ public void destroyInstance() {
+ jedisPool = null;
+ instance = null;
+ }
}
diff --git a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java
index c24b88e20c..9bf0b2b086 100644
--- a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java
+++ b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java
@@ -25,13 +25,14 @@ public class NaiveApproachIntegrationTest {
s.close();
redisServer = new RedisServer(port);
- redisServer.start();
}
@AfterClass
public static void destroy() {
- if (redisServer.isActive())
+ if (redisServer.isActive()) {
redisServer.stop();
+ redisClient.destroyInstance();
+ }
}
@Before
diff --git a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java
index 828b7a3183..9bde969b58 100644
--- a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java
+++ b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java
@@ -32,13 +32,14 @@ public class ScanStrategyIntegrationTest {
s.close();
redisServer = new RedisServer(port);
- redisServer.start();
}
@AfterClass
public static void destroy() {
- if (redisServer.isActive())
+ if (redisServer.isActive()) {
redisServer.stop();
+ redisClient.destroyInstance();
+ }
}
@Before
diff --git a/persistence-modules/spring-data-cassandra/README.md b/persistence-modules/spring-data-cassandra/README.md
index 456eefcf18..9c6745470b 100644
--- a/persistence-modules/spring-data-cassandra/README.md
+++ b/persistence-modules/spring-data-cassandra/README.md
@@ -1,8 +1,8 @@
## Spring Data Cassandra
### Relevant Articles:
-- [Introduction to Spring Data Cassandra](http://www.baeldung.com/spring-data-cassandra-tutorial)
-- [Using the CassandraTemplate from Spring Data](http://www.baeldung.com/spring-data-cassandratemplate-cqltemplate)
+- [Introduction to Spring Data Cassandra](https://www.baeldung.com/spring-data-cassandra-tutorial)
+- [Using the CassandraTemplate from Spring Data](https://www.baeldung.com/spring-data-cassandratemplate-cqltemplate)
### Build the Project with Tests Running
```
diff --git a/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java b/persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/config/CassandraConfig.java
similarity index 94%
rename from persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java
rename to persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/config/CassandraConfig.java
index 2edd5551a5..3614c2a9f6 100644
--- a/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java
+++ b/persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/config/CassandraConfig.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.cassandra.config;
+package com.baeldung.spring.data.cassandra.config;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -15,7 +15,7 @@ import org.springframework.data.cassandra.repository.config.EnableCassandraRepos
@Configuration
@PropertySource(value = { "classpath:cassandra.properties" })
-@EnableCassandraRepositories(basePackages = "org.baeldung.spring.data.cassandra.repository")
+@EnableCassandraRepositories(basePackages = "com.baeldung.spring.data.cassandra.repository")
public class CassandraConfig extends AbstractCassandraConfiguration {
private static final Log LOGGER = LogFactory.getLog(CassandraConfig.class);
diff --git a/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java b/persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/model/Book.java
similarity index 97%
rename from persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java
rename to persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/model/Book.java
index a8ec81d6b5..d347a36184 100644
--- a/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java
+++ b/persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/model/Book.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.cassandra.model;
+package com.baeldung.spring.data.cassandra.model;
import java.util.HashSet;
import java.util.Set;
diff --git a/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java b/persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/repository/BookRepository.java
similarity index 79%
rename from persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java
rename to persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/repository/BookRepository.java
index 66d656ac3a..ad144f3125 100644
--- a/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java
+++ b/persistence-modules/spring-data-cassandra/src/main/java/com/baeldung/spring/data/cassandra/repository/BookRepository.java
@@ -1,6 +1,6 @@
-package org.baeldung.spring.data.cassandra.repository;
+package com.baeldung.spring.data.cassandra.repository;
-import org.baeldung.spring.data.cassandra.model.Book;
+import com.baeldung.spring.data.cassandra.model.Book;
import org.springframework.data.cassandra.repository.CassandraRepository;
import org.springframework.data.cassandra.repository.Query;
import org.springframework.stereotype.Repository;
diff --git a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/SpringContextTest.java
similarity index 94%
rename from persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/SpringContextTest.java
index 89e729da86..22bd5c6551 100644
--- a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,12 +1,12 @@
-package org.baeldung;
+package com.baeldung;
import java.io.IOException;
import java.util.HashMap;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.thrift.transport.TTransportException;
-import org.baeldung.spring.data.cassandra.config.CassandraConfig;
-import org.baeldung.spring.data.cassandra.model.Book;
+import com.baeldung.spring.data.cassandra.config.CassandraConfig;
+import com.baeldung.spring.data.cassandra.model.Book;
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
import org.junit.After;
import org.junit.AfterClass;
diff --git a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
similarity index 96%
rename from persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
index 8cbcdc3195..55e968d6f2 100644
--- a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.cassandra.repository;
+package com.baeldung.spring.data.cassandra.repository;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -6,12 +6,12 @@ import static org.junit.Assert.assertNotEquals;
import java.io.IOException;
import java.util.HashMap;
+import com.baeldung.spring.data.cassandra.model.Book;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.thrift.transport.TTransportException;
-import org.baeldung.spring.data.cassandra.config.CassandraConfig;
-import org.baeldung.spring.data.cassandra.model.Book;
+import com.baeldung.spring.data.cassandra.config.CassandraConfig;
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
import org.junit.After;
import org.junit.AfterClass;
diff --git a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
similarity index 97%
rename from persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
index e331ac3cd4..90ae68ba98 100644
--- a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
+++ b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.cassandra.repository;
+package com.baeldung.spring.data.cassandra.repository;
import static junit.framework.TestCase.assertNull;
import static org.hamcrest.CoreMatchers.is;
@@ -10,12 +10,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import com.baeldung.spring.data.cassandra.config.CassandraConfig;
+import com.baeldung.spring.data.cassandra.model.Book;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.thrift.transport.TTransportException;
-import org.baeldung.spring.data.cassandra.config.CassandraConfig;
-import org.baeldung.spring.data.cassandra.model.Book;
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
import org.junit.After;
import org.junit.AfterClass;
diff --git a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
similarity index 96%
rename from persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
index f7e42ae23b..f948218807 100644
--- a/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
+++ b/persistence-modules/spring-data-cassandra/src/test/java/com/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.cassandra.repository;
+package com.baeldung.spring.data.cassandra.repository;
import static junit.framework.TestCase.assertEquals;
@@ -12,8 +12,8 @@ import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.thrift.transport.TTransportException;
-import org.baeldung.spring.data.cassandra.config.CassandraConfig;
-import org.baeldung.spring.data.cassandra.model.Book;
+import com.baeldung.spring.data.cassandra.config.CassandraConfig;
+import com.baeldung.spring.data.cassandra.model.Book;
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
import org.junit.After;
import org.junit.AfterClass;
diff --git a/persistence-modules/spring-data-jpa-4/README.md b/persistence-modules/spring-data-jpa-4/README.md
index 63aec5c46b..42e4619a59 100644
--- a/persistence-modules/spring-data-jpa-4/README.md
+++ b/persistence-modules/spring-data-jpa-4/README.md
@@ -3,6 +3,8 @@
- [LIKE Queries in Spring JPA Repositories](https://www.baeldung.com/spring-jpa-like-queries)
- [A Guide to Spring’s Open Session In View](https://www.baeldung.com/spring-open-session-in-view)
- [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management)
+- [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events)
+- [Working with Lazy Element Collections in JPA](https://www.baeldung.com/java-jpa-lazy-collections)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
diff --git a/podman/README.md b/podman/README.md
new file mode 100644
index 0000000000..3102036f04
--- /dev/null
+++ b/podman/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+
+- [An Introduction to Podman](https://www.baeldung.com/podman-intro)
diff --git a/pom.xml b/pom.xml
index 6e6316edd6..ca5331b287 100644
--- a/pom.xml
+++ b/pom.xml
@@ -638,9 +638,9 @@
spring-batchspring-bom
+ spring-boot-modulesspring-boot-parentspring-boot-rest
- spring-boot-securityspring-caching
@@ -692,6 +692,7 @@
spring-mvc-forms-jspspring-mvc-forms-thymeleafspring-mvc-java
+ spring-mvc-java-2spring-mvc-kotlinspring-mvc-velocity
@@ -1139,9 +1140,9 @@
spring-batchspring-bom
+ spring-boot-modulesspring-boot-parentspring-boot-rest
- spring-boot-securityspring-caching
@@ -1193,6 +1194,7 @@
spring-mvc-forms-jspspring-mvc-forms-thymeleafspring-mvc-java
+ spring-mvc-java-2spring-mvc-kotlinspring-mvc-velocity
diff --git a/slack/README.md b/slack/README.md
new file mode 100644
index 0000000000..fb3eff6290
--- /dev/null
+++ b/slack/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+
+- [How to Create a Slack Plugin in Java](https://www.baeldung.com/java-slack-plugin)
diff --git a/spring-5-reactive-security/README.md b/spring-5-reactive-security/README.md
index 4ea6fb644f..a0f47a503d 100644
--- a/spring-5-reactive-security/README.md
+++ b/spring-5-reactive-security/README.md
@@ -11,3 +11,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Spring Security 5 for Reactive Applications](https://www.baeldung.com/spring-security-5-reactive)
- [Guide to Spring 5 WebFlux](https://www.baeldung.com/spring-webflux)
- [Introduction to the Functional Web Framework in Spring 5](https://www.baeldung.com/spring-5-functional-web)
+- [Guide to the AuthenticationManagerResolver in Spring Security](https://www.baeldung.com/spring-security-authenticationmanagerresolver)
diff --git a/spring-5-security/README.md b/spring-5-security/README.md
index 4cace0db8d..07f2d48b7f 100644
--- a/spring-5-security/README.md
+++ b/spring-5-security/README.md
@@ -8,4 +8,4 @@ This module contains articles about Spring Security 5
- [A Custom Spring SecurityConfigurer](https://www.baeldung.com/spring-security-custom-configurer)
- [New Password Storage In Spring Security 5](https://www.baeldung.com/spring-security-5-password-storage)
- [Default Password Encoder in Spring Security 5](https://www.baeldung.com/spring-security-5-default-password-encoder)
-
+- [Guide to the AuthenticationManagerResolver in Spring Security](https://www.baeldung.com/spring-security-authenticationmanagerresolver)
diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml
index e28b077d5c..0918aa9496 100644
--- a/spring-boot-modules/pom.xml
+++ b/spring-boot-modules/pom.xml
@@ -24,6 +24,7 @@
spring-boot-config-jpa-errorspring-boot-ctx-fluentspring-boot-deployment
+ spring-boot-dispring-boot-camelspring-boot-custom-starter
@@ -41,9 +42,11 @@
spring-boot-mvc-2spring-boot-mvc-birtspring-boot-nashorn
+ spring-boot-performancespring-boot-propertiesspring-boot-property-expspring-boot-runtime
+ spring-boot-securityspring-boot-springdocspring-boot-testingspring-boot-vue
diff --git a/spring-boot-modules/spring-boot-artifacts/README.md b/spring-boot-modules/spring-boot-artifacts/README.md
index 876954e858..cb77cfad4d 100644
--- a/spring-boot-modules/spring-boot-artifacts/README.md
+++ b/spring-boot-modules/spring-boot-artifacts/README.md
@@ -9,3 +9,5 @@ This module contains articles about configuring the Spring Boot build process.
- [Introduction to WebJars](https://www.baeldung.com/maven-webjars)
- [A Quick Guide to Maven Wrapper](https://www.baeldung.com/maven-wrapper)
- [Running a Spring Boot App with Maven vs an Executable War/Jar](https://www.baeldung.com/spring-boot-run-maven-vs-executable-jar)
+ - [Injecting Git Information Into Spring](https://www.baeldung.com/spring-git-information)
+ - [Guide to Creating and Running a Jar File in Java](https://www.baeldung.com/java-create-jar)
diff --git a/spring-boot-modules/spring-boot-artifacts/pom.xml b/spring-boot-modules/spring-boot-artifacts/pom.xml
index d6d3886c3e..f7c8636593 100644
--- a/spring-boot-modules/spring-boot-artifacts/pom.xml
+++ b/spring-boot-modules/spring-boot-artifacts/pom.xml
@@ -139,6 +139,33 @@
+
+
+ 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
+
+
+
@@ -185,6 +212,7 @@
3.1.13.3.7-12.2
+ 2.2.418.03.1.72.0.2.RELEASE
diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java b/spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitIdApplication.java
similarity index 100%
rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java
rename to spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitIdApplication.java
diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java b/spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitInfoController.java
similarity index 100%
rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java
rename to spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitInfoController.java
diff --git a/spring-boot-modules/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java b/spring-boot-modules/spring-boot-artifacts/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java
similarity index 100%
rename from spring-boot-modules/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java
rename to spring-boot-modules/spring-boot-artifacts/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java
diff --git a/spring-boot-modules/spring-boot-autoconfiguration/README.md b/spring-boot-modules/spring-boot-autoconfiguration/README.md
index b3a50ad7a5..d1b5fde7ed 100644
--- a/spring-boot-modules/spring-boot-autoconfiguration/README.md
+++ b/spring-boot-modules/spring-boot-autoconfiguration/README.md
@@ -10,3 +10,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Create a Custom Auto-Configuration with Spring Boot](https://www.baeldung.com/spring-boot-custom-auto-configuration)
- [Guide to ApplicationContextRunner in Spring Boot](https://www.baeldung.com/spring-boot-context-runner)
- [A Guide to Spring Boot Configuration Metadata](https://www.baeldung.com/spring-boot-configuration-metadata)
+- [Display Auto-Configuration Report in Spring Boot](https://www.baeldung.com/spring-boot-auto-configuration-report)
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-data/README.md b/spring-boot-modules/spring-boot-data/README.md
index f023bb772f..faa38d475e 100644
--- a/spring-boot-modules/spring-boot-data/README.md
+++ b/spring-boot-modules/spring-boot-data/README.md
@@ -9,3 +9,4 @@ This module contains articles about Spring Boot with Spring Data
- [Disable Spring Data Auto Configuration](https://www.baeldung.com/spring-data-disable-auto-config)
- [Repositories with Multiple Spring Data Modules](https://www.baeldung.com/spring-multiple-data-modules)
- [Spring Custom Property Editor](https://www.baeldung.com/spring-mvc-custom-property-editor)
+- [Using @JsonComponent in Spring Boot](https://www.baeldung.com/spring-boot-jsoncomponent)
diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java
similarity index 86%
rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java
rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java
index 1f14131300..ca22dc57ea 100644
--- a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java
+++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java
@@ -1,4 +1,4 @@
-package org.baeldung.boot.jsoncomponent;
+package com.baeldung.boot.jsoncomponent;
import javafx.scene.paint.Color;
diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java
similarity index 97%
rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java
rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java
index f4d7505342..d0a14da1f2 100644
--- a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java
+++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java
@@ -1,4 +1,4 @@
-package org.baeldung.boot.jsoncomponent;
+package com.baeldung.boot.jsoncomponent;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java
similarity index 95%
rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java
rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java
index f7bd822c8a..05b1cb10a0 100644
--- a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java
+++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java
@@ -1,4 +1,4 @@
-package org.baeldung.boot.jsoncomponent;
+package com.baeldung.boot.jsoncomponent;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java
similarity index 96%
rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java
rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java
index 03330d81a4..1df37728ba 100644
--- a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java
+++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java
@@ -1,4 +1,4 @@
-package org.baeldung.boot.jsoncomponent;
+package com.baeldung.boot.jsoncomponent;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
diff --git a/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java
similarity index 89%
rename from spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java
rename to spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java
index f8b47a23fc..868d40c38b 100644
--- a/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java
@@ -1,9 +1,9 @@
-package org.baeldung.boot.jsoncomponent;
+package com.baeldung.boot.jsoncomponent;
+import com.baeldung.boot.jsoncomponent.User;
import com.fasterxml.jackson.databind.ObjectMapper;
import javafx.scene.paint.Color;
-import org.baeldung.boot.jsoncomponent.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java
similarity index 90%
rename from spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java
rename to spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java
index 060374e8fa..aef99921a5 100644
--- a/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java
@@ -1,5 +1,6 @@
-package org.baeldung.boot.jsoncomponent;
+package com.baeldung.boot.jsoncomponent;
+import com.baeldung.boot.jsoncomponent.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import javafx.scene.paint.Color;
@@ -11,8 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.assertEquals;
-import org.baeldung.boot.jsoncomponent.User;
-
@JsonTest
@RunWith(SpringRunner.class)
public class UserJsonSerializerIntegrationTest {
diff --git a/spring-boot-di/README.MD b/spring-boot-modules/spring-boot-di/README.MD
similarity index 100%
rename from spring-boot-di/README.MD
rename to spring-boot-modules/spring-boot-di/README.MD
diff --git a/spring-boot-di/pom.xml b/spring-boot-modules/spring-boot-di/pom.xml
similarity index 97%
rename from spring-boot-di/pom.xml
rename to spring-boot-modules/spring-boot-di/pom.xml
index 61059630c4..b24e4a9037 100644
--- a/spring-boot-di/pom.xml
+++ b/spring-boot-modules/spring-boot-di/pom.xml
@@ -12,7 +12,7 @@
com.baeldungparent-boot-20.0.1-SNAPSHOT
- ../parent-boot-2
+ ../../parent-boot-2
diff --git a/spring-boot-di/src/main/java/com/baeldung/SpringBootDiApplication.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/SpringBootDiApplication.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/SpringBootDiApplication.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/SpringBootDiApplication.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/ExampleBean.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/ExampleBean.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/ExampleBean.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/ExampleBean.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Animal.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Animal.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Animal.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Animal.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/ComponentScanAnnotationFilterApp.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/ComponentScanAnnotationFilterApp.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/ComponentScanAnnotationFilterApp.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/ComponentScanAnnotationFilterApp.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Elephant.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Elephant.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Elephant.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/filter/annotation/Elephant.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/SpringComponentScanApp.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/SpringComponentScanApp.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/SpringComponentScanApp.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/SpringComponentScanApp.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Cat.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Cat.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Cat.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Cat.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Dog.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Dog.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Dog.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/animals/Dog.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/flowers/Rose.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/flowers/Rose.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/flowers/Rose.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springapp/flowers/Rose.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/SpringBootComponentScanApp.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/SpringBootComponentScanApp.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/SpringBootComponentScanApp.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/SpringBootComponentScanApp.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Cat.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Cat.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Cat.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Cat.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Dog.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Dog.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Dog.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/animals/Dog.java
diff --git a/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/flowers/Rose.java b/spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/flowers/Rose.java
similarity index 100%
rename from spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/flowers/Rose.java
rename to spring-boot-modules/spring-boot-di/src/main/java/com/baeldung/componentscan/springbootapp/flowers/Rose.java
diff --git a/spring-boot-modules/spring-boot-mvc-2/README.md b/spring-boot-modules/spring-boot-mvc-2/README.md
index dae815a1c1..cb0eea4c2a 100644
--- a/spring-boot-modules/spring-boot-mvc-2/README.md
+++ b/spring-boot-modules/spring-boot-mvc-2/README.md
@@ -5,5 +5,5 @@ This module contains articles about Spring Web MVC in Spring Boot projects.
### Relevant Articles:
- [Functional Controllers in Spring MVC](https://www.baeldung.com/spring-mvc-functional-controllers)
-- [Specify an array of strings as body parameter in Swagger API](https://www.baeldung.com/swagger-body-array-of-strings)
+- [Specify an Array of Strings as Body Parameters in Swagger](https://www.baeldung.com/swagger-body-array-of-strings)
- More articles: [[prev -->]](/spring-boot-mvc)
diff --git a/spring-boot-performance/README.md b/spring-boot-modules/spring-boot-performance/README.md
similarity index 71%
rename from spring-boot-performance/README.md
rename to spring-boot-modules/spring-boot-performance/README.md
index f6a11720de..9443e5bb19 100644
--- a/spring-boot-performance/README.md
+++ b/spring-boot-modules/spring-boot-performance/README.md
@@ -5,3 +5,4 @@ This module contains articles about Spring Boot performance.
### Relevant Articles
- [Lazy Initialization in Spring Boot 2](https://www.baeldung.com/spring-boot-lazy-initialization)
+- [Introduction to Chaos Monkey](https://www.baeldung.com/spring-boot-chaos-monkey)
diff --git a/spring-boot-performance/pom.xml b/spring-boot-modules/spring-boot-performance/pom.xml
similarity index 75%
rename from spring-boot-performance/pom.xml
rename to spring-boot-modules/spring-boot-performance/pom.xml
index 7bf3885618..1f3eafd96c 100644
--- a/spring-boot-performance/pom.xml
+++ b/spring-boot-modules/spring-boot-performance/pom.xml
@@ -11,7 +11,7 @@
com.baeldungparent-boot-20.0.1-SNAPSHOT
- ../parent-boot-2
+ ../../parent-boot-2
@@ -19,6 +19,17 @@
org.springframework.bootspring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ de.codecentric
+ chaos-monkey-spring-boot
+ ${chaos.monkey.version}
+
@@ -41,5 +52,6 @@
com.baeldung.lazyinitialization.Application
+ 2.0.0
diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java
similarity index 100%
rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java
rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java
diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java
similarity index 100%
rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java
rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java
diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java
similarity index 100%
rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java
rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java
diff --git a/spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/Application.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/Application.java
similarity index 100%
rename from spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/Application.java
rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/Application.java
diff --git a/spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/services/Writer.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/services/Writer.java
similarity index 100%
rename from spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/services/Writer.java
rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/lazyinitialization/services/Writer.java
diff --git a/spring-boot-modules/spring-boot-performance/src/main/resources/application.properties b/spring-boot-modules/spring-boot-performance/src/main/resources/application.properties
new file mode 100644
index 0000000000..3727232ea6
--- /dev/null
+++ b/spring-boot-modules/spring-boot-performance/src/main/resources/application.properties
@@ -0,0 +1,29 @@
+#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-performance/src/main/resources/application.yml b/spring-boot-modules/spring-boot-performance/src/main/resources/application.yml
similarity index 100%
rename from spring-boot-performance/src/main/resources/application.yml
rename to spring-boot-modules/spring-boot-performance/src/main/resources/application.yml
diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml
index 5fa1a37792..04879a5052 100644
--- a/spring-boot-modules/spring-boot-properties/pom.xml
+++ b/spring-boot-modules/spring-boot-properties/pom.xml
@@ -6,6 +6,7 @@
spring-boot-propertiesjarSpring Boot Properties Module
+ 0.0.1-SNAPSHOTcom.baeldung
@@ -64,6 +65,19 @@
true
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+ @
+
+ false
+
+
+
@@ -106,6 +120,7 @@
1.1020.04.4.11
+ @
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/buildproperties/Application.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/buildproperties/Application.java
new file mode 100644
index 0000000000..405cec3eac
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/buildproperties/Application.java
@@ -0,0 +1,18 @@
+package com.baeldung.buildproperties;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.PropertySource;
+
+@SpringBootApplication
+@ComponentScan(basePackages = "com.baeldung.buildproperties")
+@PropertySource("classpath:build.properties")
+//@PropertySource("classpath:build.yml")
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/buildproperties/BuildInfoService.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/buildproperties/BuildInfoService.java
new file mode 100644
index 0000000000..2a0d27188e
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/buildproperties/BuildInfoService.java
@@ -0,0 +1,21 @@
+package com.baeldung.buildproperties;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BuildInfoService {
+ @Value("${application-description}")
+ private String applicationDescription;
+
+ @Value("${application-version}")
+ private String applicationVersion;
+
+ public String getApplicationDescription() {
+ return applicationDescription;
+ }
+
+ public String getApplicationVersion() {
+ return applicationVersion;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties b/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties
new file mode 100644
index 0000000000..f3d2e9b15b
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties
@@ -0,0 +1 @@
+application-version=@project.version@
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/build.yml b/spring-boot-modules/spring-boot-properties/src/main/resources/build.yml
new file mode 100644
index 0000000000..528d2e3440
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/build.yml
@@ -0,0 +1,2 @@
+application-description: ^project.description^
+application-version: ^project.version^
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java
new file mode 100644
index 0000000000..cb056fe56d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java
@@ -0,0 +1,24 @@
+package com.baeldung.buildproperties;
+
+import static org.junit.Assert.assertThat;
+
+import org.hamcrest.Matchers;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+class BuildInfoServiceIntegrationTest {
+
+ @Autowired
+ private BuildInfoService service;
+
+ @Test
+ void whenGetApplicationDescription_thenSuccess() {
+ assertThat(service.getApplicationDescription(), Matchers.is("This is simple boot application for Spring boot actuator test"));
+ assertThat(service.getApplicationVersion(), Matchers.is("0.0.1-SNAPSHOT"));
+ }
+}
diff --git a/spring-boot-security/README.md b/spring-boot-modules/spring-boot-security/README.md
similarity index 88%
rename from spring-boot-security/README.md
rename to spring-boot-modules/spring-boot-security/README.md
index be4690f321..7229ba0f4a 100644
--- a/spring-boot-security/README.md
+++ b/spring-boot-modules/spring-boot-security/README.md
@@ -7,6 +7,7 @@ This module contains articles about Spring Boot Security
- [Spring Boot Security Auto-Configuration](https://www.baeldung.com/spring-boot-security-autoconfiguration)
- [Spring Security for Spring Boot Integration Tests](https://www.baeldung.com/spring-security-integration-tests)
- [Introduction to Spring Security Taglibs](https://www.baeldung.com/spring-security-taglibs)
+- [Guide to @CurrentSecurityContext in Spring Security](https://www.baeldung.com/spring-currentsecuritycontext)
### Spring Boot Security Auto-Configuration
diff --git a/spring-boot-security/pom.xml b/spring-boot-modules/spring-boot-security/pom.xml
similarity index 98%
rename from spring-boot-security/pom.xml
rename to spring-boot-modules/spring-boot-security/pom.xml
index 92397d42f8..a72113ce2f 100644
--- a/spring-boot-security/pom.xml
+++ b/spring-boot-modules/spring-boot-security/pom.xml
@@ -11,7 +11,7 @@
com.baeldungparent-boot-20.0.1-SNAPSHOT
- ../parent-boot-2
+ ../../parent-boot-2
diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java
diff --git a/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java
similarity index 100%
rename from spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java
rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java
diff --git a/spring-boot-security/src/main/resources/application-authz.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-authz.properties
similarity index 100%
rename from spring-boot-security/src/main/resources/application-authz.properties
rename to spring-boot-modules/spring-boot-security/src/main/resources/application-authz.properties
diff --git a/spring-boot-security/src/main/resources/application-resource.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-resource.properties
similarity index 100%
rename from spring-boot-security/src/main/resources/application-resource.properties
rename to spring-boot-modules/spring-boot-security/src/main/resources/application-resource.properties
diff --git a/spring-boot-security/src/main/resources/application-sso.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-sso.properties
similarity index 100%
rename from spring-boot-security/src/main/resources/application-sso.properties
rename to spring-boot-modules/spring-boot-security/src/main/resources/application-sso.properties
diff --git a/spring-boot-security/src/main/resources/application-taglibs.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-taglibs.properties
similarity index 100%
rename from spring-boot-security/src/main/resources/application-taglibs.properties
rename to spring-boot-modules/spring-boot-security/src/main/resources/application-taglibs.properties
diff --git a/spring-boot-security/src/main/resources/application.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application.properties
similarity index 100%
rename from spring-boot-security/src/main/resources/application.properties
rename to spring-boot-modules/spring-boot-security/src/main/resources/application.properties
diff --git a/spring-boot-security/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-security/src/main/resources/logback.xml
similarity index 100%
rename from spring-boot-security/src/main/resources/logback.xml
rename to spring-boot-modules/spring-boot-security/src/main/resources/logback.xml
diff --git a/spring-boot-security/src/main/resources/static/index.html b/spring-boot-modules/spring-boot-security/src/main/resources/static/index.html
similarity index 100%
rename from spring-boot-security/src/main/resources/static/index.html
rename to spring-boot-modules/spring-boot-security/src/main/resources/static/index.html
diff --git a/spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp b/spring-boot-modules/spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp
similarity index 100%
rename from spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp
rename to spring-boot-modules/spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp
diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java
diff --git a/spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java
similarity index 100%
rename from spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java
rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java
diff --git a/spring-boot-modules/spring-boot/README.MD b/spring-boot-modules/spring-boot/README.MD
index 2423d6d331..217d9e90b2 100644
--- a/spring-boot-modules/spring-boot/README.MD
+++ b/spring-boot-modules/spring-boot/README.MD
@@ -16,7 +16,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Create a Custom FailureAnalyzer with Spring Boot](https://www.baeldung.com/spring-boot-failure-analyzer)
- [Dynamic DTO Validation Config Retrieved from the Database](https://www.baeldung.com/spring-dynamic-dto-validation)
- [Custom Information in Spring Boot Info Endpoint](https://www.baeldung.com/spring-boot-info-actuator-custom)
-- [Using @JsonComponent in Spring Boot](https://www.baeldung.com/spring-boot-jsoncomponent)
- [Testing in Spring Boot](https://www.baeldung.com/spring-boot-testing)
- [How to Get All Spring-Managed Beans?](https://www.baeldung.com/spring-show-all-beans)
- [Spring Boot and Togglz Aspect](https://www.baeldung.com/spring-togglz)
@@ -31,8 +30,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Guide to the Favicon in Spring Boot](https://www.baeldung.com/spring-boot-favicon)
- [Spring Shutdown Callbacks](https://www.baeldung.com/spring-shutdown-callbacks)
- [Container Configuration in Spring Boot 2](https://www.baeldung.com/embeddedservletcontainercustomizer-configurableembeddedservletcontainer-spring-boot)
-- [Introduction to Chaos Monkey](https://www.baeldung.com/spring-boot-chaos-monkey)
-- [Display Auto-Configuration Report in Spring Boot](https://www.baeldung.com/spring-boot-auto-configuration-report)
-- [Injecting Git Information Into Spring](https://www.baeldung.com/spring-git-information)
- [Validation in Spring Boot](https://www.baeldung.com/spring-boot-bean-validation)
-- [Guide to Creating and Running a Jar File in Java](https://www.baeldung.com/java-create-jar)
diff --git a/spring-boot-modules/spring-boot/pom.xml b/spring-boot-modules/spring-boot/pom.xml
index 3fb1ec9acc..e0ff9ae2f9 100644
--- a/spring-boot-modules/spring-boot/pom.xml
+++ b/spring-boot-modules/spring-boot/pom.xml
@@ -145,12 +145,6 @@
${rome.version}
-
- de.codecentric
- chaos-monkey-spring-boot
- ${chaos.monkey.version}
-
-
javax.validationvalidation-api
@@ -173,32 +167,6 @@
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.pluginsmaven-resources-plugin
@@ -256,12 +224,10 @@
8.5.112.4.1.Final1.9.0
- 2.0.05.0.25.0.25.2.418.0
- 2.2.4@
diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md
deleted file mode 100644
index 7e6a597c28..0000000000
--- a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-### Relevant Articles:
-- [Injecting Git Information Into Spring](http://www.baeldung.com/spring-git-information)
diff --git a/spring-boot-modules/spring-boot/src/main/resources/application.properties b/spring-boot-modules/spring-boot/src/main/resources/application.properties
index c322fb0573..7de79da574 100644
--- a/spring-boot-modules/spring-boot/src/main/resources/application.properties
+++ b/spring-boot-modules/spring-boot/src/main/resources/application.properties
@@ -41,34 +41,4 @@ servlet.mapping=/dispatcherExampleURL
#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
+contactInfoType=email
\ No newline at end of file
diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java
new file mode 100644
index 0000000000..c900bab26c
--- /dev/null
+++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.beandefinitionoverrideexception;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {TestConfiguration1.class, TestConfiguration2.class}, properties = {"spring.main.allow-bean-definition-overriding=true"})
+public class SpringBootBeanDefinitionOverrideExceptionIntegrationTest {
+
+ @Autowired
+ private ApplicationContext applicationContext;
+
+ @Test
+ public void whenBeanOverridingAllowed_thenTestBean2OverridesTestBean1() {
+ Object testBean = applicationContext.getBean("testBean");
+
+ assertThat(testBean.getClass()).isEqualTo(TestConfiguration2.TestBean2.class);
+ }
+}
diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java
new file mode 100644
index 0000000000..a0e8ea3028
--- /dev/null
+++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java
@@ -0,0 +1,27 @@
+package com.baeldung.beandefinitionoverrideexception;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class TestConfiguration1 {
+
+ class TestBean1 {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+ }
+
+ @Bean
+ public TestBean1 testBean() {
+ return new TestBean1();
+ }
+
+}
diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java
new file mode 100644
index 0000000000..842b84c866
--- /dev/null
+++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java
@@ -0,0 +1,28 @@
+package com.baeldung.beandefinitionoverrideexception;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class TestConfiguration2 {
+
+ class TestBean2 {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ }
+
+ @Bean
+ public TestBean2 testBean() {
+ return new TestBean2();
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-zuul/pom.xml b/spring-cloud/spring-cloud-zuul/pom.xml
index b1f2e886de..e0a63ae00b 100644
--- a/spring-cloud/spring-cloud-zuul/pom.xml
+++ b/spring-cloud/spring-cloud-zuul/pom.xml
@@ -19,6 +19,7 @@
spring-zuul-foos-resourcespring-zuul-uispring-zuul-rate-limiting
+ spring-zuul-post-filter
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/.gitignore b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/.gitignore
new file mode 100644
index 0000000000..0af075f75a
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/.gitignore
@@ -0,0 +1,2 @@
+target/*
+*.iml
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml
new file mode 100644
index 0000000000..c13aeb890e
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/pom.xml
@@ -0,0 +1,25 @@
+
+
+
+ spring-cloud-zuul
+ com.baeldung.spring.cloud
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+ spring-zuul-post-filter
+
+
+ Hoxton.SR1
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-zuul
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/ZuulPostFilterApplication.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/ZuulPostFilterApplication.java
new file mode 100644
index 0000000000..c9aad4e08d
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/ZuulPostFilterApplication.java
@@ -0,0 +1,14 @@
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
+
+@SpringBootApplication
+@EnableZuulProxy
+public class ZuulPostFilterApplication {
+
+ public static void main(String... args) {
+ SpringApplication.run(ZuulPostFilterApplication.class, args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/controllers/GreetingController.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/controllers/GreetingController.java
new file mode 100644
index 0000000000..bd21b098ab
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/controllers/GreetingController.java
@@ -0,0 +1,16 @@
+package com.baeldung.controllers;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+@RequestMapping("/greeting")
+public class GreetingController {
+
+ @GetMapping("/simple")
+ public ResponseEntity getSimple() {
+ return ResponseEntity.ok("Hi");
+ }
+}
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java
new file mode 100644
index 0000000000..e589e27d46
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java
@@ -0,0 +1,58 @@
+package com.baeldung.filters;
+
+import com.google.common.io.CharStreams;
+import com.netflix.zuul.ZuulFilter;
+import com.netflix.zuul.context.RequestContext;
+import com.netflix.zuul.exception.ZuulException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.POST_TYPE;
+
+@Component
+public class ResponseLogFilter extends ZuulFilter {
+
+ private Logger logger = LoggerFactory.getLogger(ResponseLogFilter.class);
+
+ @Override
+ public String filterType() {
+ return POST_TYPE;
+ }
+
+ @Override
+ public int filterOrder() {
+ return 0;
+ }
+
+ @Override
+ public boolean shouldFilter() {
+ return true;
+ }
+
+ @Override
+ public Object run() throws ZuulException {
+
+ RequestContext context = RequestContext.getCurrentContext();
+ try (final InputStream responseDataStream = context.getResponseDataStream()) {
+
+ if(responseDataStream == null) {
+ logger.info("BODY: {}", "");
+ return null;
+ }
+
+ String responseData = CharStreams.toString(new InputStreamReader(responseDataStream, "UTF-8"));
+ logger.info("BODY: {}", responseData);
+
+ context.setResponseBody(responseData);
+ }
+ catch (Throwable e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+}
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/resources/application.yml
new file mode 100644
index 0000000000..ebcc7c8be7
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/resources/application.yml
@@ -0,0 +1,11 @@
+server:
+ port: 8080
+zuul:
+ prefix: /api
+ routes:
+ greeting-service:
+ path: /greeting/**
+ url: forward:/greeting
+ foos-service:
+ path: /foos/**
+ url: http://localhost:8081/spring-zuul-foos-resource/foos
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/test/java/com/baeldung/ZuulPostFilterLiveTest.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/test/java/com/baeldung/ZuulPostFilterLiveTest.java
new file mode 100644
index 0000000000..475508879e
--- /dev/null
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/test/java/com/baeldung/ZuulPostFilterLiveTest.java
@@ -0,0 +1,30 @@
+package com.baeldung;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.http.ResponseEntity;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
+public class ZuulPostFilterLiveTest {
+
+ @LocalServerPort
+ private int port;
+ private static final String SIMPLE_GREETING = "/api/greeting/simple";
+ private TestRestTemplate restTemplate = new TestRestTemplate();
+
+ @Test
+ public void whenClientCallApi_thenLogAndReturnResponseBody() {
+ String url = "http://localhost:" + port + SIMPLE_GREETING;
+ ResponseEntity response = restTemplate.getForEntity(url, String.class);
+ assertTrue(response.getStatusCode().is2xxSuccessful());
+ assertEquals(response.getBody(), "Hi");
+ }
+}
diff --git a/spring-mvc-java-2/.gitignore b/spring-mvc-java-2/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/spring-mvc-java-2/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/spring-mvc-java-2/pom.xml b/spring-mvc-java-2/pom.xml
new file mode 100644
index 0000000000..d5b7d087ab
--- /dev/null
+++ b/spring-mvc-java-2/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 4.0.0
+ spring-mvc-java-2
+ 0.1-SNAPSHOT
+ spring-mvc-java-2
+ war
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ ${javax.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.mvc.version}
+
+
+
+
+
+ 4.0.1
+ 5.2.2.RELEASE
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java
new file mode 100644
index 0000000000..5bf095888e
--- /dev/null
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java
@@ -0,0 +1,55 @@
+package com.baeldung.cache;
+
+import org.springframework.http.CacheControl;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.context.request.WebRequest;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.concurrent.TimeUnit;
+
+@Controller
+public class CacheControlController {
+
+ @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)
+ public ResponseEntity helloWorld(@PathVariable String name) {
+ CacheControl cacheControl = CacheControl.maxAge(60, TimeUnit.SECONDS)
+ .noTransform()
+ .mustRevalidate();
+ return ResponseEntity.ok()
+ .cacheControl(cacheControl)
+ .body("Hello " + name);
+ }
+
+ @RequestMapping(value = "/home/{name}", method = RequestMethod.GET)
+ public String home(@PathVariable String name, final HttpServletResponse response) {
+ response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform");
+ return "home";
+ }
+
+ @RequestMapping(value = "/cache/{name}", method = RequestMethod.GET)
+ public ResponseEntity intercept(@PathVariable String name) {
+ return ResponseEntity.ok().body("Hello " + name);
+ }
+
+ @RequestMapping(value = "/validate/{name}", method = RequestMethod.GET)
+ public ResponseEntity validate(@PathVariable String name, WebRequest request) {
+
+ ZoneId zoneId = ZoneId.of("GMT");
+ long lastModifiedTimestamp = LocalDateTime.of(2020, 02, 4, 19, 57, 45)
+ .atZone(zoneId).toInstant().toEpochMilli();
+
+ if (request.checkNotModified(lastModifiedTimestamp)) {
+ return ResponseEntity.status(304).build();
+ }
+
+ return ResponseEntity.ok().body("Hello " + name);
+ }
+
+
+}
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
new file mode 100644
index 0000000000..728479979c
--- /dev/null
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
@@ -0,0 +1,41 @@
+package com.baeldung.cache;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.CacheControl;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.mvc.WebContentInterceptor;
+
+import java.util.concurrent.TimeUnit;
+
+@EnableWebMvc
+@Configuration
+@ComponentScan(basePackages = {"com.baeldung.cache"})
+public class WebConfig implements WebMvcConfigurer {
+
+ @Override
+ public void addViewControllers(final ViewControllerRegistry registry) {
+ registry.addViewController("/").setViewName("index");
+ }
+
+ @Override
+ public void addResourceHandlers(final ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/resources/**").addResourceLocations("/resources/")
+ .setCacheControl(CacheControl.maxAge(60, TimeUnit.SECONDS)
+ .noTransform()
+ .mustRevalidate());
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ WebContentInterceptor interceptor = new WebContentInterceptor();
+ interceptor.addCacheMapping(CacheControl.maxAge(60, TimeUnit.SECONDS)
+ .noTransform()
+ .mustRevalidate(), "/cache/*");
+ registry.addInterceptor(interceptor);
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-java-2/src/main/webapp/resources/hello.css b/spring-mvc-java-2/src/main/webapp/resources/hello.css
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
new file mode 100644
index 0000000000..ef408038ae
--- /dev/null
+++ b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
@@ -0,0 +1,80 @@
+package com.baeldung.cache;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import static org.springframework.http.HttpHeaders.IF_UNMODIFIED_SINCE;
+
+@ExtendWith(SpringExtension.class)
+@WebAppConfiguration
+@ContextConfiguration(classes = {WebConfig.class, WebConfig.class})
+public class CacheControlControllerIntegrationTest {
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ private MockMvc mockMvc;
+
+ @BeforeEach
+ void setup() throws Exception {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+ }
+
+ @Test
+ void whenResponseBody_thenReturnCacheHeader() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/hello/baeldung"))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(MockMvcResultMatchers.status().isOk())
+ .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform"));
+ }
+
+ @Test
+ void whenViewName_thenReturnCacheHeader() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/home/baeldung"))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(MockMvcResultMatchers.status().isOk())
+ .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform"))
+ .andExpect(MockMvcResultMatchers.view().name("home"));
+ }
+
+ @Test
+ void whenStaticResources_thenReturnCacheHeader() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/resources/hello.css"))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(MockMvcResultMatchers.status().isOk())
+ .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform"));
+ }
+
+ @Test
+ void whenInterceptor_thenReturnCacheHeader() throws Exception {
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/cache/baeldung"))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(MockMvcResultMatchers.status().isOk())
+ .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform"));
+ }
+
+ @Test
+ void whenValidate_thenReturnCacheHeader() throws Exception {
+ HttpHeaders headers = new HttpHeaders();
+ headers.add(IF_UNMODIFIED_SINCE, "Tue, 04 Feb 2020 19:57:25 GMT");
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/validate/baeldung").headers(headers))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(MockMvcResultMatchers.status().is(304));
+ }
+
+
+
+
+}
diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml
index e93b426119..c389e41e29 100644
--- a/spring-mvc-xml/pom.xml
+++ b/spring-mvc-xml/pom.xml
@@ -92,6 +92,30 @@
${spring-boot.version}test
+
+
+
+ org.crashub
+ crash.embed.spring
+ ${crash.version}
+
+
+ org.crashub
+ crash.cli
+ ${crash.version}
+
+
+ org.crashub
+ crash.connectors.telnet
+ ${crash.version}
+
+
+
+
+ org.codehaus.groovy
+ groovy
+ ${groovy.version}
+
@@ -137,6 +161,9 @@
1.6.1
+
+ 1.3.2
+ 3.0.0-rc-3
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy
new file mode 100644
index 0000000000..d66ab13d96
--- /dev/null
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy
@@ -0,0 +1,14 @@
+import org.crsh.cli.Command;
+import org.crsh.cli.Usage;
+import org.crsh.cli.Option;
+
+class message {
+
+ @Usage("show my own message")
+ @Command
+ Object main(@Usage("custom message") @Option(names=["m","message"]) String message) {
+ if (message == null)
+ message = "No message given...";
+ return message;
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java
new file mode 100644
index 0000000000..d1ead88024
--- /dev/null
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java
@@ -0,0 +1,14 @@
+import org.crsh.command.BaseCommand;
+import org.crsh.cli.Usage;
+import org.crsh.cli.Command;
+import org.crsh.cli.Option;
+
+public class message2 extends BaseCommand {
+ @Usage("show my own message using java")
+ @Command
+ public Object main(@Usage("custom message") @Option(names = { "m", "message" }) String message) {
+ if (message == null)
+ message = "No message given...";
+ return message;
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties
new file mode 100644
index 0000000000..f9ad0d7cf6
--- /dev/null
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties
@@ -0,0 +1 @@
+crash.telnet.port=50001
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties
new file mode 100644
index 0000000000..99071d09ff
--- /dev/null
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties
@@ -0,0 +1,65 @@
+############################
+# Telnet daemon properties #
+############################
+
+#####################
+# Terminals Section #
+#####################
+
+# List of terminals available and defined below
+terminals=vt100,ansi,windoof,xterm
+
+# vt100 implementation and aliases
+term.vt100.class=net.wimpi.telnetd.io.terminal.vt100
+term.vt100.aliases=default,vt100-am,vt102,dec-vt100
+
+# ansi implementation and aliases
+term.ansi.class=net.wimpi.telnetd.io.terminal.ansi
+term.ansi.aliases=color-xterm,xterm-color,vt320,vt220,linux,screen
+
+# windoof implementation and aliases
+term.windoof.class=net.wimpi.telnetd.io.terminal.Windoof
+term.windoof.aliases=
+
+# xterm implementation and aliases
+term.xterm.class=net.wimpi.telnetd.io.terminal.xterm
+term.xterm.aliases=
+
+##################
+# Shells Section #
+##################
+
+# List of shells available and defined below
+shells=simple
+
+# shell implementations
+shell.simple.class=org.crsh.telnet.term.TelnetHandler
+
+#####################
+# Listeners Section #
+#####################
+listeners=std
+
+
+# std listener specific properties
+
+#Basic listener and connection management settings (port is commented because CRaSH configures it)
+# std.port=5000
+std.floodprotection=5
+std.maxcon=25
+
+
+# Timeout Settings for connections (ms)
+std.time_to_warning=3600000
+std.time_to_timedout=60000
+
+# Housekeeping thread active every 1 secs
+std.housekeepinginterval=1000
+
+std.inputmode=character
+
+# Login shell
+std.loginshell=simple
+
+# Connection filter class
+std.connectionfilter=none
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml b/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml
index 5c8fa611ed..126fea996e 100644
--- a/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml
@@ -52,4 +52,15 @@
+
+
+
+
+
+ 5000
+
+
+
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml b/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml
index 6ff435b84b..4a3d6cb321 100644
--- a/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml
@@ -21,6 +21,9 @@
org.springframework.web.context.ContextLoaderListener
+
+ org.crsh.plugin.WebPluginLifeCycle
+
diff --git a/spring-security-modules/spring-security-core/README.md b/spring-security-modules/spring-security-core/README.md
index 6b1f236b7c..e42dfecaa0 100644
--- a/spring-security-modules/spring-security-core/README.md
+++ b/spring-security-modules/spring-security-core/README.md
@@ -7,6 +7,7 @@ This module contains articles about core Spring Security
- [Spring Boot Authentication Auditing Support](https://www.baeldung.com/spring-boot-authentication-audit)
- [Introduction to Spring Method Security](https://www.baeldung.com/spring-security-method-security)
- [Overview and Need for DelegatingFilterProxy in Spring](https://www.baeldung.com/spring-delegating-filter-proxy)
+- [Deny Access on Missing @PreAuthorize to Spring Controller Methods](https://www.baeldung.com/spring-deny-access)
### Build the Project
diff --git a/spring-security-modules/spring-security-oidc/README.md b/spring-security-modules/spring-security-oidc/README.md
index 92ba60cad9..ca6053f70f 100644
--- a/spring-security-modules/spring-security-oidc/README.md
+++ b/spring-security-modules/spring-security-oidc/README.md
@@ -5,6 +5,7 @@ This module contains articles about OpenID with Spring Security
### Relevant articles
- [Spring Security and OpenID Connect](https://www.baeldung.com/spring-security-openid-connect)
+- [Spring Security and OpenID Connect (Legacy)](https://www.baeldung.com/spring-security-openid-connect-legacy)
### OpenID Connect with Spring Security
diff --git a/testing-modules/selenium-junit-testng/README.md b/testing-modules/selenium-junit-testng/README.md
index 0137212290..198247d7bf 100644
--- a/testing-modules/selenium-junit-testng/README.md
+++ b/testing-modules/selenium-junit-testng/README.md
@@ -1,3 +1,4 @@
### Relevant Articles:
- [Guide to Selenium with JUnit / TestNG](http://www.baeldung.com/java-selenium-with-junit-and-testng)
- [Testing with Selenium/WebDriver and the Page Object Pattern](http://www.baeldung.com/selenium-webdriver-page-object)
+- [Using Cookies With Selenium WebDriver in Java](https://www.baeldung.com/java-selenium-webdriver-cookies)
diff --git a/testing-modules/testing-libraries/README.md b/testing-modules/testing-libraries/README.md
index e5145d6af8..b5360bd841 100644
--- a/testing-modules/testing-libraries/README.md
+++ b/testing-modules/testing-libraries/README.md
@@ -9,4 +9,5 @@
- [Introduction to CheckStyle](https://www.baeldung.com/checkstyle-java)
- [Introduction to FindBugs](https://www.baeldung.com/intro-to-findbugs)
- [Cucumber Data Tables](https://www.baeldung.com/cucumber-data-tables)
-
+- [Cucumber Background](https://www.baeldung.com/java-cucumber-background)
+- [Cucumber Hooks](https://www.baeldung.com/java-cucumber-hooks)