23.9 程序退出

每个SpringApplication都会向JVM注册一个关闭钩子,以确保在退出时ApplicationContext被正常关闭。所有标准的Spring的生命周期回调(如DisposableBean接口或@PreDestroy注解)都可以使用。

另外,如果希望bean在SpringApplication.exit()被调用时返回特定的退出码,那么bean可以实现org.springframework.boot.ExitCodeGenerator接口。然后可以将此退出码传递给System.exit()作为状态码返回。

@SpringBootApplication
public class ExitCodeApplication {

    @Bean
    public ExitCodeGenerator exitCodeGenerator() {
        return new ExitCodeGenerator() {
            @Override
            public int getExitCode() {
                return 42;
            }
        };
    }

    public static void main(String[] args) {
        System.exit(SpringApplication
                .exit(SpringApplication.run(ExitCodeApplication.class, args)));
    }

}

同样地,ExitCodeGenerator接口也可能被异常实现。遇到这样的异常时,Spring Boot将返回由实现的getExitCode()方法提供的退出码。


书籍推荐