Java Spring引导退出代码生成器-实现不工作

Java Spring引导退出代码生成器-实现不工作,java,spring-boot,groovy,Java,Spring Boot,Groovy,我意识到在这个话题上有几个类似的未解决的问题,所以,我在这里加入了一个,这样就可以很容易地重现问题场景 场景 我正试图根据Spring Boot实现一个Spring Boot退出代码生成器。看起来Spring Boot正在调用退出代码生成器,但应用程序退出时代码为0,而不是给定的退出代码。我错过了什么 @SpringBootApplication @Configuration @Slf4j class App implements CommandLineRunner { @Autowi

我意识到在这个话题上有几个类似的未解决的问题,所以,我在这里加入了一个,这样就可以很容易地重现问题场景

场景

我正试图根据Spring Boot实现一个Spring Boot退出代码生成器。看起来Spring Boot正在调用退出代码生成器,但应用程序退出时代码为0,而不是给定的退出代码。我错过了什么

@SpringBootApplication
@Configuration
@Slf4j
class App implements CommandLineRunner {

    @Autowired ConfigurableApplicationContext ctx

    static void main(String[] args) {
        SpringApplication.run(App.class, args)
    }

    @Override
    void run(String... args) throws Exception {
        SpringApplication.exit(ctx, new ExitCodeGenerator() {
            @Override
            int getExitCode() {
                log.info 'retrieving exit code.'
                return -1
            }
        })
    }
}
输出:

C:\Users\pc\IdeaProjects\spring-exit-code-gen>gradlew bootRepackage

C:\Users\pc\IdeaProjects\spring-exit-code-gen>java -jar build/libs/spring-exit-code-gen-1-0.0.1-SNAPSHOT.jar

2017-09-13 12:26:53.819  INFO 2832 --- [           main] com.scarlatti.App                        : Starting App on pc-PC with PID 2832 (C:\Users\pc\IdeaProjects\spring-exit-code-gen\build\libs\spring-exit-code-gen-1-0.0.1-SNAPSHOT.jar started by pc in C:\Users\pc\IdeaProjects\spring-exit-code-gen\build\libs)
2017-09-13 12:26:53.824  INFO 2832 --- [           main] com.scarlatti.App                        : No active profile set, falling back to default profiles: default
2017-09-13 12:26:53.966  INFO 2832 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2752f6e2: startup date [Wed Sep 13 12:26:53 CDT 2017]; root of context hierarchy
2017-09-13 12:26:54.924  INFO 2832 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-09-13 12:26:54.962  INFO 2832 --- [           main] com.scarlatti.App                        : retrieving exit code.
2017-09-13 12:26:54.963  INFO 2832 --- [           main] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2752f6e2: startup date [Wed Sep 13 12:26:53 CDT 2017]; root of context hierarchy
2017-09-13 12:26:54.964  INFO 2832 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2017-09-13 12:26:54.969  INFO 2832 --- [           main] com.scarlatti.App                        : Started App in 1.945 seconds (JVM running for 3.132)

C:\Users\pc\IdeaProjects\spring-exit-code-gen>echo %ERRORLEVEL%
0
要尝试它。

因为您需要调用
系统。退出
并返回调用
SpringApplication.exit的结果。大概是这样的:

@Override
void run(String... args) throws Exception {
    System.exit(SpringApplication.exit(ctx, new ExitCodeGenerator() {
        @Override
        int getExitCode() {
            log.info 'retrieving exit code.'
            return -1
        }
    }))
}

非常感谢你!不知怎的,那个文档页我找不到。我们必须用这段代码调用System.exit(),这非常合理!谢谢使用lambda:
System.exit(SpringApplication.exit(context,()->-1))