elasticsearch,jetty,spark-framework,Java,elasticsearch,Jetty,Spark Framework" /> elasticsearch,jetty,spark-framework,Java,elasticsearch,Jetty,Spark Framework" />

Java Spark框架:侦听服务器停止

Java Spark框架:侦听服务器停止,java,elasticsearch,jetty,spark-framework,Java,elasticsearch,Jetty,Spark Framework,是否有一种方法可以在Spark framework关闭时监听,以运行一些清理?例如,我想关闭我的ElasticSearch客户端。一种方法是使用Runtime.getRuntime().addShutdownHook() 这是一种通用的Java机制,用于在程序退出时运行代码。因为Spark框架web应用程序只是一个普通的web应用程序,所以它可以正常工作。看 但是,如果使用Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用中止VM进程,则不

是否有一种方法可以在Spark framework关闭时监听,以运行一些清理?例如,我想关闭我的ElasticSearch客户端。

一种方法是使用
Runtime.getRuntime().addShutdownHook()

这是一种通用的Java机制,用于在程序退出时运行代码。因为Spark框架web应用程序只是一个普通的web应用程序,所以它可以正常工作。看


但是,如果使用Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用中止VM进程,则不会运行此挂钩。请注意,这适用于在大多数IDE中按下“停止”按钮。

正如@Martin Eden所解释的,一种方法是使用
Runtime.getRuntime().addShutdownHook(…)
但这与
spark
server(jetty)生命周期无关。实际上,您可以在不停止应用程序的情况下停止服务器,并且此关闭钩子不会运行添加到
运行时的任何钩子清理。因此,如果你停止应用程序,它将清理你的应用程序

另一个选项是在Jetty中添加一个生命周期(托管)bean,并将属性stop at shutdown设置为true
server.setStopAtShutdown(true)


如果未设置停止关闭,则可以在spark服务停止时进行注册:

final Service ignite = Service.ignite();
Runtime.getRuntime().addShutdownHook(service::stop);
final Service ignite = Service.ignite();
Runtime.getRuntime().addShutdownHook(service::stop);