Merge pull request #5893 from mprevisic/master
BAEL-2351 programmatically restart spring boot application
This commit is contained in:
commit
c7da8f3183
@ -86,6 +86,12 @@
|
|||||||
<version>${jquery.version}</version>
|
<version>${jquery.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-context</artifactId>
|
||||||
|
<version>${springcloud.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@ -153,6 +159,7 @@
|
|||||||
<jpa.version>2.2</jpa.version>
|
<jpa.version>2.2</jpa.version>
|
||||||
<guava.version>18.0</guava.version>
|
<guava.version>18.0</guava.version>
|
||||||
<subethasmtp.version>3.1.7</subethasmtp.version>
|
<subethasmtp.version>3.1.7</subethasmtp.version>
|
||||||
|
<springcloud.version>2.0.2.RELEASE</springcloud.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,3 +1,7 @@
|
|||||||
management.endpoints.web.exposure.include=*
|
management.endpoints.web.exposure.include=*
|
||||||
management.metrics.enable.root=true
|
management.metrics.enable.root=true
|
||||||
management.metrics.enable.jvm=true
|
management.metrics.enable.jvm=true
|
||||||
|
management.endpoint.restart.enabled=true
|
||||||
|
spring.datasource.jmx-enabled=false
|
||||||
|
spring.main.allow-bean-definition-overriding=true
|
||||||
|
management.endpoint.shutdown.enabled=true
|
@ -0,0 +1,39 @@
|
|||||||
|
package com.baeldung.restart;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||||
|
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
|
public class RestartApplicationIntegrationTest {
|
||||||
|
|
||||||
|
private TestRestTemplate restTemplate = new TestRestTemplate();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenBootApp_whenRestart_thenOk() throws Exception {
|
||||||
|
Application.main(new String[0]);
|
||||||
|
|
||||||
|
ResponseEntity response = restTemplate.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 = restTemplate.exchange("http://localhost:8090/restartApp",
|
||||||
|
HttpMethod.POST, null, Object.class);
|
||||||
|
|
||||||
|
assertEquals(200, response.getStatusCode().value());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -4,4 +4,9 @@ spring.mail.properties.mail.smtp.auth=false
|
|||||||
|
|
||||||
management.endpoints.web.exposure.include=*
|
management.endpoints.web.exposure.include=*
|
||||||
management.endpoint.shutdown.enabled=true
|
management.endpoint.shutdown.enabled=true
|
||||||
endpoints.shutdown.enabled=true
|
endpoints.shutdown.enabled=true
|
||||||
|
|
||||||
|
management.endpoint.restart.enabled=true
|
||||||
|
|
||||||
|
spring.main.allow-bean-definition-overriding=true
|
||||||
|
spring.jmx.unique-names=true
|
Loading…
x
Reference in New Issue
Block a user