Spark Java 2.6.0 - 关机钩子

时间:2017-07-10 21:02:23

标签: spark-java

spark-java 2.6.0的文档提到“嵌入式Jetty现在是完全可配置的”。

如何通过Spark 2.6.0配置关闭挂钩?

我过去已经覆盖了Jetty的Handler.doStop()方法,但我不清楚如何通过Spark框架完成等效的事情。

2 个答案:

答案 0 :(得分:1)

这里是你如何覆盖sparkjava中的Handler.doStop()

public class Main {
    public static void main(String ...args) throws Exception {
        EmbeddedServers.add(EmbeddedServers.Identifiers.JETTY, (Routes routeMatcher, StaticFilesConfiguration staticFilesConfiguration, boolean hasMultipleHandler) -> {
            MatcherFilter matcherFilter = new MatcherFilter(routeMatcher, staticFilesConfiguration, false, hasMultipleHandler);
            matcherFilter.init(null);

            JettyHandler handler = new MyJettyHandler(matcherFilter);

            return new EmbeddedJettyServer((int maxThreads, int minThreads, int threadTimeoutMillis) -> new Server(), handler);
        });

        get("/hello", (req, res) -> {
            req.session(true);
            return "Hello World";
        });
    }
 }

class MyJettyHandler extends JettyHandler {

    public MyJettyHandler(Filter filter) {
        super(filter);
    }

    @Override
    protected void doStop() throws Exception {
        super.doStop();

        // your magic happens here.
    }
}

初始化嵌入式jetty的代码取自sparkjava本身,因此我不会改变框架的行为。

答案 1 :(得分:0)

对于正在寻找答案的较新版本的Spark的人们,这里有一个参考:http://sparkjava.com/documentation#stopping-the-server

因为互联网上的URL永远不会存在,所以这里是qoute:

  

通过调用stop()方法,服务器将停止并清除所有路由。

以及我如何使用代码的示例:

    public static void stopService(){
        stop();
        awaitStop();
    }

这有什么用?例如,当您想对服务进行重复测试以将其清除并重新初始化时,便会派上用场,