gpt4 book ai didi

java - Spark框架: Listen for server stop

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:40 25 4
gpt4 key购买 nike

有没有办法监听 Spark 框架何时关闭,以运行一些清理工作?例如,我想关闭我的 ElasticSearch 客户端。

最佳答案

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

另一个选择是在 Jetty 中添加一个 Lifecycle(托管)bean,并将属性 stop at shutdown 设置为 true server.setStopAtShutdown(true); .

EmbeddedServers.add(EmbeddedServers.Identifiers.JETTY, new MyJettyFactory());

static class MyJettyFactory implements EmbeddedServerFactory {

public EmbeddedServer create(Routes routeMatcher, StaticFilesConfiguration staticFilesConfiguration, boolean hasMultipleHandler) {
MatcherFilter matcherFilter = new MatcherFilter(routeMatcher, staticFilesConfiguration, false, hasMultipleHandler);
matcherFilter.init(null);

final Handler handler = new JettyHandler(matcherFilter);

return new EmbeddedJettyServer((maxThreads, minThreads, threadTimeoutMillis) -> {
final Server server = new Server();
server.setStopAtShutdown(true);
server.setStopTimeout(Duration.of(30, ChronoUnit.SECONDS).toMillis());
server.addBean(new ManagedObjects(new Managed() {
@Override
public void doStart() {

}

@Override
public void doStop() {
System.out.println("Good bye!");
}
}));
return server;
}, handler);

}
}
<小时/>

如果您没有设置停止关闭,您可以在 Spark 服务停止时注册:

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

关于java - Spark框架: Listen for server stop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34978421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com