Spring ExitCodeGenerator和System.exit之间的差异(0)
我最近了解到关闭Spring Boot应用程序的正确方法是:Spring ExitCodeGenerator和System.exit之间的差异(0),spring,spring-boot,exit-code,Spring,Spring Boot,Exit Code,我最近了解到关闭Spring Boot应用程序的正确方法是: public class Application { @Bean public ExitCodeGenerator exitCodeGenerator() { return new ExitCodeGenerator() { @Override public int getExitCode() { return 0;
public class Application {
@Bean
public ExitCodeGenerator exitCodeGenerator() {
return new ExitCodeGenerator() {
@Override
public int getExitCode() {
return 0;
}
};
}
public static void main(String[] args) throws Exception {
System.exit(SpringApplication.exit(SpringApplication.run(Application.class, args)));
}
}
这应该返回0的退出代码,或者我在getExitCode()
方法中将其配置为返回的任何代码。我的问题是-采用上述方法与采用以下方法有什么区别:
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
System.exit(0);
}
}
两种方法关闭应用程序的方式似乎完全相同,至少在控制台中是这样。那么区别是什么呢?如果您希望在调用SpringApplication.exit()时返回特定的退出代码,则使用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()方法提供的退出代码。当然,对于您的示例来说,这并不重要。但这允许将某个异常“粘合”到某个退出代码。默认情况下,Spring捕获代码可能抛出的所有异常(如果此类异常还实现了
ExitCodeGenerator
),这些异常将用于输出您提供的退出代码
当然,您可以手动进行映射,但它更为冗长,更难维护;春天使这更容易。一旦理解了这一点,您可能还会对能够将基础
异常
(假设有多条错误消息)映射到不同错误代码的ExitCodeExceptionMapper
感兴趣 似乎我也可以用另一种方式返回特定的退出代码。我刚刚在SpringApplication.run()
方法之后执行了System.exit(42)
,应用程序以42的退出代码结束。您能更新这个答案并提供一些示例吗?