Programmatically shut down Spring Boot application

前端 未结 5 1248
误落风尘
误落风尘 2020-11-27 13:52

How can I programmatically shutdown a Spring Boot application without terminating the VM?

In other works, what is

5条回答
  •  天涯浪人
    2020-11-27 14:33

    Closing a SpringApplication basically means closing the underlying ApplicationContext. The SpringApplication#run(String...) method gives you that ApplicationContext as a ConfigurableApplicationContext. You can then close() it yourself.

    For example,

    @SpringBootApplication
    public class Example {
        public static void main(String[] args) {
            ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args);
            // ...determine it's time to shut down...
            ctx.close();
        }
    }
    

    Alternatively, you can use the static SpringApplication.exit(ApplicationContext, ExitCodeGenerator...) helper method to do it for you. For example,

    @SpringBootApplication
    public class Example {
        public static void main(String[] args) {
            ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args);
            // ...determine it's time to stop...
            int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {
                @Override
                public int getExitCode() {
                    // no errors
                    return 0;
                }
            });
    
            // or shortened to
            // int exitCode = SpringApplication.exit(ctx, () -> 0);
    
            System.exit(exitCode);
        }
    }
    

提交回复
热议问题