diff --git a/spring-boot-ops/pom.xml b/spring-boot-ops/pom.xml
index 57779c3f8e..9717a352d3 100644
--- a/spring-boot-ops/pom.xml
+++ b/spring-boot-ops/pom.xml
@@ -86,6 +86,12 @@
${jquery.version}
+
+ org.springframework.cloud
+ spring-cloud-context
+ ${springcloud.version}
+
+
@@ -153,6 +159,7 @@
2.2
18.0
3.1.7
+ 2.0.2.RELEASE
diff --git a/spring-boot-ops/pom.xml~ b/spring-boot-ops/pom.xml~
new file mode 100644
index 0000000000..2c3b650c30
--- /dev/null
+++ b/spring-boot-ops/pom.xml~
@@ -0,0 +1,164 @@
+
+
+ 4.0.0
+
+ spring-boot-ops
+ war
+ spring-boot-ops
+ Demo project for Spring Boot
+
+
+ parent-boot-2
+ com.baeldung
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ com.h2database
+ h2
+ runtime
+
+
+
+ javax.persistence
+ javax.persistence-api
+ ${jpa.version}
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+ org.subethamail
+ subethasmtp
+ ${subethasmtp.version}
+ test
+
+
+
+ org.webjars
+ bootstrap
+ ${bootstrap.version}
+
+
+
+ org.webjars
+ jquery
+ ${jquery.version}
+
+
+
+ org.springframework.cloud
+ spring-cloud-context
+ ${springcloud.version}
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+ com.baeldung.webjar.WebjarsdemoApplication
+
+
+
+
+
+
+
+
+
+ autoconfiguration
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ integration-test
+
+ test
+
+
+
+ **/*LiveTest.java
+ **/*IntegrationTest.java
+ **/*IntTest.java
+
+
+ **/AutoconfigurationTest.java
+
+
+
+
+
+
+ json
+
+
+
+
+
+
+
+
+
+
+ org.baeldung.boot.Application
+ 3.1.1
+ 3.3.7-1
+ 2.2
+ 18.0
+ 3.1.7
+
+
+
diff --git a/spring-boot-ops/src/main/java/com/baeldung/restart/Application.java b/spring-boot-ops/src/main/java/com/baeldung/restart/Application.java
new file mode 100644
index 0000000000..a6605a0baa
--- /dev/null
+++ b/spring-boot-ops/src/main/java/com/baeldung/restart/Application.java
@@ -0,0 +1,30 @@
+package com.baeldung.restart;
+
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.ConfigurableApplicationContext;
+
+@SpringBootApplication
+public class Application extends SpringBootServletInitializer {
+
+ private static ConfigurableApplicationContext context;
+
+ public static void main(String[] args) {
+ context = SpringApplication.run(Application.class, args);
+ }
+
+ public static void restart() {
+ ApplicationArguments args = context.getBean(ApplicationArguments.class);
+
+ Thread thread = new Thread(() -> {
+ context.close();
+ context = SpringApplication.run(Application.class, args.getSourceArgs());
+ });
+
+ thread.setDaemon(false);
+ thread.start();
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-ops/src/main/java/com/baeldung/restart/RestartController.java b/spring-boot-ops/src/main/java/com/baeldung/restart/RestartController.java
new file mode 100644
index 0000000000..68a8dc7073
--- /dev/null
+++ b/spring-boot-ops/src/main/java/com/baeldung/restart/RestartController.java
@@ -0,0 +1,23 @@
+package com.baeldung.restart;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class RestartController {
+
+ @Autowired
+ private RestartService restartService;
+
+ @PostMapping("/restart")
+ public void restart() {
+ Application.restart();
+ }
+
+ @PostMapping("/restartApp")
+ public void restartUsingActuator() {
+ restartService.restartApp();
+ }
+
+}
diff --git a/spring-boot-ops/src/main/java/com/baeldung/restart/RestartService.java b/spring-boot-ops/src/main/java/com/baeldung/restart/RestartService.java
new file mode 100644
index 0000000000..9883ec653b
--- /dev/null
+++ b/spring-boot-ops/src/main/java/com/baeldung/restart/RestartService.java
@@ -0,0 +1,17 @@
+package com.baeldung.restart;
+
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.context.restart.RestartEndpoint;
+
+@Service
+public class RestartService {
+
+ @Autowired
+ private RestartEndpoint restartEndpoint;
+
+ public void restartApp() {
+ restartEndpoint.restart();
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-ops/src/main/resources/application.properties b/spring-boot-ops/src/main/resources/application.properties
index a86bd3052e..644a3edabc 100644
--- a/spring-boot-ops/src/main/resources/application.properties
+++ b/spring-boot-ops/src/main/resources/application.properties
@@ -1,3 +1,4 @@
management.endpoints.web.exposure.include=*
management.metrics.enable.root=true
-management.metrics.enable.jvm=true
\ No newline at end of file
+management.metrics.enable.jvm=true
+management.endpoint.restart.enabled=true
\ No newline at end of file
diff --git a/spring-boot-ops/src/test/java/com/baeldung/restart/RestartApplicationIntegrationTest.java b/spring-boot-ops/src/test/java/com/baeldung/restart/RestartApplicationIntegrationTest.java
new file mode 100644
index 0000000000..1bec3c6a90
--- /dev/null
+++ b/spring-boot-ops/src/test/java/com/baeldung/restart/RestartApplicationIntegrationTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.restart;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+public class RestartApplicationIntegrationTest {
+
+ private TestRestTemplate template = new TestRestTemplate();
+
+ @Test
+ public void givenBootApp_whenRestart_thenOk() throws Exception {
+ Application.main(new String[0]);
+
+ ResponseEntity response = template.exchange("http://localhost:8080/restart",
+ HttpMethod.POST, null, Object.class);
+
+ assertEquals(200, response.getStatusCode().value());
+ }
+
+ @Test
+ public void givenBootApp_whenRestartUsingActuator_thenOk() throws Exception {
+ Application.main(new String[] { "--server.port=8090" });
+
+ ResponseEntity response = template.exchange("http://localhost:8090/restartApp",
+ HttpMethod.POST, null, Object.class);
+
+ assertEquals(200, response.getStatusCode().value());
+ }
+
+}
diff --git a/spring-boot-ops/src/test/resources/application.properties b/spring-boot-ops/src/test/resources/application.properties
index 2095a82a14..0adf2998d7 100644
--- a/spring-boot-ops/src/test/resources/application.properties
+++ b/spring-boot-ops/src/test/resources/application.properties
@@ -4,4 +4,6 @@ spring.mail.properties.mail.smtp.auth=false
management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true
-endpoints.shutdown.enabled=true
\ No newline at end of file
+endpoints.shutdown.enabled=true
+
+management.endpoint.restart.enabled=true
\ No newline at end of file