以编程方式关闭弹簧启动应用程序

2022-08-31 08:06:12

如何在不终止 VM 的情况下以编程方式关闭 Spring Boot 应用程序?

在其他作品中,什么是相反的

new SpringApplication(Main.class).run(args);

答案 1

关闭SpringApplication基本上意味着关闭底层。SpringApplication#run(String...) 方法将其作为 .然后你可以自己关闭()它。ApplicationContextApplicationContextConfigurableApplicationContext

例如

@SpringBootApplication
public class Example {
    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args);
        // ...determine it's time to shut down...
        ctx.close();
    }
}

或者,您可以使用SpringApplication.exit(ApplicationContext,ExitCodeGenerator...)帮助程序方法来为您完成此操作。例如static

@SpringBootApplication
public class Example {
    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(Example.class, args);
        // ...determine it's time to stop...
        int exitCode = SpringApplication.exit(ctx, new ExitCodeGenerator() {
            @Override
            public int getExitCode() {
                // no errors
                return 0;
            }
        });

        // or shortened to
        // int exitCode = SpringApplication.exit(ctx, () -> 0);

        System.exit(exitCode);
    }
}

答案 2

最简单的方法是在需要启动关机的位置注入以下对象

关机管理器.java

import org.springframework.context.ApplicationContext;
import org.springframework.boot.SpringApplication;

@Component
class ShutdownManager {

    @Autowired
    private ApplicationContext appContext;

    /*
     * Invoke with `0` to indicate no error or different code to indicate
     * abnormal exit. es: shutdownManager.initiateShutdown(0);
     **/
    public void initiateShutdown(int returnCode){
        SpringApplication.exit(appContext, () -> returnCode);
    }
}

推荐