以编程方式关闭弹簧启动应用程序
2022-08-31 08:06:12
如何在不终止 VM 的情况下以编程方式关闭 Spring Boot 应用程序?
在其他作品中,什么是相反的
new SpringApplication(Main.class).run(args);
如何在不终止 VM 的情况下以编程方式关闭 Spring Boot 应用程序?
在其他作品中,什么是相反的
new SpringApplication(Main.class).run(args);
关闭SpringApplication
基本上意味着关闭底层。SpringApplication#run(String...)
方法将其作为 .然后你可以自己关闭()
它。ApplicationContext
ApplicationContext
ConfigurableApplicationContext
例如
@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);
}
}
最简单的方法是在需要启动关机的位置注入以下对象
关机管理器.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);
}
}