每个SpringApplication
都会在JVM中注册一个关闭钩子,以确保在退出时ApplicationContext
能够优雅地关闭。所有标准的Spring生命周期回调(如DisposableBean
接口或@PreDestroy
注解)都可以使用。
此外,如果bean希望在调用SpringApplication.exit()
时返回特定的退出代码,可以实现org.springframework.boot.ExitCodeGenerator
接口。然后,可以将此退出代码传递给System.exit(),
将其作为状态代码返回,如下例所示:
import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class MyApplication {
@Bean
public ExitCodeGenerator exitCodeGenerator() {
return () -> 42;
}
public static void main(String[] args) {
System.exit(SpringApplication.exit(SpringApplication.run(MyApplication.class, args)));
}
}
此外,异常也可以实现ExitCodeGenerator
接口。当遇到这样的异常时,Spring Boot会返回通过实现的getExitCode
()方法提供的退出代码。
如果存在多个ExitCodeGenerator
,则使用生成的第一个非零退出代码。要控制生成器被调用的顺序,可以额外实现org.springframework.core.Ordered
接口或使用org.springframework.core.annotation.Order
注解。