Shut down a Spring Boot application
This post will discuss how to shut down a Spring Boot application.
1. Using ApplicationContext#close() method
Since closing the Spring Application basically means closing the underlying ApplicationContext. The idea is to use the close() method to close the application context, releasing all resources and locks that the implementation might hold. We can get ApplicationContext as a ConfigurableApplicationContext using SpringApplication.run() method, as shown below:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class Main { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Main.class, args); // do something context.close(); } } |
2. Using SpringApplication#exit() method
Alternatively, we can use SpringApplication.exit(ApplicationContext, ExitCodeGenerator…) static utility method, as shown in the following example:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class Main { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Main.class, args); // do something int exitCode = SpringApplication.exit(context, new ExitCodeGenerator() { @Override public int getExitCode() { return 0; } }); System.exit(exitCode); } } |
Using Java 8 Lambda, we can rewrite the above code as:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class Main { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Main.class, args); // do something System.exit(SpringApplication.exit(context, () -> 0)); } } |
We can also autowire ApplicationContext into one of our controllers and initiate app shut down from the controller itself, as shown below:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.context.ApplicationContext; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Controller { @Autowired private ApplicationContext context; public void initiateAppShutdown(int returnCode) { SpringApplication.exit(context, () -> returnCode); } @RequestMapping("/shutdown") public void shutdown() { initiateAppShutdown(0); } // … } |
That’s all about shutting down a Spring Boot application.
Thanks for reading.
To share your code in the comments, please use our online compiler that supports C, C++, Java, Python, JavaScript, C#, PHP, and many more popular programming languages.
Like us? Refer us to your friends and support our growth. Happy coding :)