diff --git a/core-java-modules/core-java-string-operations-3/src/main/java/com/baeldung/firstword/FirstWordGetter.java b/core-java-modules/core-java-string-operations-3/src/main/java/com/baeldung/firstword/FirstWordGetter.java
new file mode 100644
index 0000000000..03c134752a
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-3/src/main/java/com/baeldung/firstword/FirstWordGetter.java
@@ -0,0 +1,20 @@
+package com.baeldung.firstword;
+
+public class FirstWordGetter {
+
+ public static void main(String[] args) {
+ String input = "Roberto \"I wish you a bug-free day\"";
+ System.out.println("Using split: " + getFirstWordUsingSplit(input));
+ System.out.println("Using subString: " + getFirstWordUsingSubString(input));
+ }
+
+ public static String getFirstWordUsingSubString(String input) {
+ int index = input.contains(" ") ? input.indexOf(" ") : 0;
+ return input.substring(0, index);
+ }
+
+ public static String getFirstWordUsingSplit(String input) {
+ String[] tokens = input.split(" ", 2);
+ return tokens[0];
+ }
+}
diff --git a/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/firstword/FirstWordGetterUnitTest.java b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/firstword/FirstWordGetterUnitTest.java
new file mode 100644
index 0000000000..bdaa25180e
--- /dev/null
+++ b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/firstword/FirstWordGetterUnitTest.java
@@ -0,0 +1,30 @@
+package com.baeldung.firstword;
+
+import static com.baeldung.firstword.FirstWordGetter.getFirstWordUsingSplit;
+import static com.baeldung.firstword.FirstWordGetter.getFirstWordUsingSubString;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+public class FirstWordGetterUnitTest {
+
+ @Test
+ public void givenString_whenSplit_thenFirstWordIsReturned() {
+ assertEquals("Roberto", getFirstWordUsingSplit("Roberto \"I wish you a bug-free day\""));
+ }
+
+ @Test
+ public void givenStringWithNoSpace_whenSplit_thenFirstWordIsReturned() {
+ assertEquals("StringWithNoSpace", getFirstWordUsingSplit("StringWithNoSpace"));
+ }
+
+ @Test
+ public void givenString_whenPassedToSubstring_thenFirstWordIsReturned() {
+ assertEquals("Roberto", getFirstWordUsingSubString("Roberto \"I wish you a bug-free day\""));
+ }
+
+ @Test
+ public void givenStringWithNoSpace_whenPassedToSubstring_thenFirstWordIsReturned() {
+ assertEquals("", getFirstWordUsingSubString("StringWithNoSpace"));
+ }
+}
diff --git a/jhipster/jhipster-uaa/gateway/pom.xml b/jhipster/jhipster-uaa/gateway/pom.xml
index bc3c9bdef2..536b847237 100644
--- a/jhipster/jhipster-uaa/gateway/pom.xml
+++ b/jhipster/jhipster-uaa/gateway/pom.xml
@@ -1054,7 +1054,6 @@
2.10
3.0.0-M2
3.1.0
- 2.22.0
3.2.2
0.9.11
1.6
diff --git a/jhipster/jhipster-uaa/quotes/pom.xml b/jhipster/jhipster-uaa/quotes/pom.xml
index 7e4252b309..d922be10c2 100644
--- a/jhipster/jhipster-uaa/quotes/pom.xml
+++ b/jhipster/jhipster-uaa/quotes/pom.xml
@@ -874,7 +874,6 @@
2.10
3.0.0-M2
3.1.0
- 2.22.0
3.2.2
0.9.11
0.8.2
diff --git a/jhipster/jhipster-uaa/uaa/pom.xml b/jhipster/jhipster-uaa/uaa/pom.xml
index ec4dc1b484..a43da9c366 100644
--- a/jhipster/jhipster-uaa/uaa/pom.xml
+++ b/jhipster/jhipster-uaa/uaa/pom.xml
@@ -875,7 +875,6 @@
2.10
3.0.0-M2
3.1.0
- 2.22.0
3.2.2
0.9.11
0.8.2
diff --git a/persistence-modules/spring-boot-persistence/src/test/resources/dsrouting-db.sql b/persistence-modules/spring-boot-persistence/src/test/resources/dsrouting-db.sql
index c9ca52907a..7449b23307 100644
--- a/persistence-modules/spring-boot-persistence/src/test/resources/dsrouting-db.sql
+++ b/persistence-modules/spring-boot-persistence/src/test/resources/dsrouting-db.sql
@@ -1,3 +1,5 @@
+drop table if exists client;
+
create table client (
id numeric,
name varchar(50),
diff --git a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/startup/ResourceInitializer.java b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/startup/ResourceInitializer.java
new file mode 100644
index 0000000000..e50816821c
--- /dev/null
+++ b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/startup/ResourceInitializer.java
@@ -0,0 +1,17 @@
+package com.baeldung.startup;
+
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class ResourceInitializer {
+
+ ResourceInitializer() throws Exception {
+ // simulate resource init with random delay of a few seconds
+ int randomDelay = ThreadLocalRandom.current().nextInt(5, 9);
+ TimeUnit.SECONDS.sleep(randomDelay);
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/startup/StartupTrackingApplication.java b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/startup/StartupTrackingApplication.java
new file mode 100644
index 0000000000..a3762cb98e
--- /dev/null
+++ b/spring-boot-modules/spring-boot-actuator/src/main/java/com/baeldung/startup/StartupTrackingApplication.java
@@ -0,0 +1,38 @@
+package com.baeldung.startup;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
+import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
+
+import static java.lang.Boolean.FALSE;
+
+@SpringBootApplication(exclude = {
+ SecurityAutoConfiguration.class,
+ ManagementWebSecurityAutoConfiguration.class}
+)
+public class StartupTrackingApplication {
+
+ public static void main(String[] args) {
+ // only load properties for this application
+ System.setProperty("spring.config.location", "classpath:application-startup.properties");
+
+ SpringApplication app = new SpringApplication(StartupTrackingApplication.class);
+ BufferingApplicationStartup startup = new BufferingApplicationStartup(2048);
+
+ if (shouldFilterSteps()) {
+ startup.addFilter(startupStep -> startupStep.getName().matches("spring.beans.instantiate"));
+ }
+
+ app.setApplicationStartup(startup);
+ app.run(args);
+ }
+
+ private static boolean shouldFilterSteps() {
+ return Boolean.parseBoolean(
+ System.getProperty("startup.steps.filter", FALSE.toString())
+ );
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-actuator/src/main/resources/application-startup.properties b/spring-boot-modules/spring-boot-actuator/src/main/resources/application-startup.properties
new file mode 100644
index 0000000000..4cb5f2a94d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-actuator/src/main/resources/application-startup.properties
@@ -0,0 +1,6 @@
+management.endpoints.web.exposure.include=startup
+
+# JPA is not required for startup actuator endpoint
+spring.autoconfigure.exclude= org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, \
+ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, \
+ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration