ExitCodeGenerator 和 System.exit(0) 之间的区别

2024-04-30

我最近了解到关闭 Spring Boot 应用程序的正确方法是:

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() 方法提供的退出代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExitCodeGenerator 和 System.exit(0) 之间的区别 的相关文章

随机推荐