【发布时间】:2016-06-17 16:49:12
【问题描述】:
我有一个使用可执行 jar 文件运行的 Spring Boot 应用程序。目前要停止服务,我们只是杀死进程。我看到我们可以使用以下方法优雅地关闭应用程序。
ApplicationContext ctx = SpringApplication.run(Application.class, args);
然后在代码的某处我可以调用ctx.close() 或者我们可以使用下面的静态方法。
SpringApplication.exit(ApplicationContext, ExitCodeGenerator)
它目前对我们有用,但我们实际上是在控制器中调用这个 ctx.close() 方法,如下所示。
@RequestMapping("/shutdownSpringBoot")
public void shutdownApplication() {
MyApplication.ctx.close(); // I'm saving the context returned by spring boot in a static variable inside my main class
}
当我们通过 http 访问这个控制器方法时,应用程序会正常关闭。但我们不想这样做。是否可以编写一个 shell / 批处理脚本来触发我可以在其中调用 ctx.close() 方法的 java 类?我们正在寻找一个关闭脚本,就像我们从独立的 tomcat 容器(shutdown.bat / shutdown.sh)中获得的那样,这样我们就可以将我们的应用程序作为 jar 文件提供给我们的客户,他们可以通过以下方式启动或停止应用程序执行那些脚本。 (他们已经习惯了)。
谢谢, 桑杰
【问题讨论】:
-
发送一个 SIGINT 是 优雅并启动你上面描述的。您的停止脚本可能是一个单行程序,它读取 application.pid 并将其传递给 kill。
标签: java spring shell spring-boot