【问题标题】:Dropwizard: How to shutdown service programmatically (in-process)?Dropwizard:如何以编程方式(进程内)关闭服务?
【发布时间】:2015-06-15 15:40:13
【问题描述】:

以编程方式关闭 Dropwizard 服务的最佳做法是什么,例如,如果我想终止 Dropwizard 服务的任何线程中发生未捕获的异常?


仅供参考: StackOverflow 上类似但不相关的问题:

这个问题Dropwizard: How to stop service programmatically 与对您的服务进行单元测试有关

这个问题How to shutdown dropwizard application? 与如何在进程外关闭服务有关。

【问题讨论】:

    标签: java dropwizard


    【解决方案1】:

    您可以像 DropwizardClientRuleDropwizardAppRule 一样执行此操作:通过调用 org.eclipse.jetty.server.Server#stop() 停止 Jetty 服务。

    要获取 Jetty 实例,您必须注册一个生命周期回调处理程序:

    environment.lifecycle().addServerLifecycleListener(new ServerLifecycleListener() {
        @Override
        public void serverStarted(Server server) {
            myJettyServer = server;
        }
    });
    

    【讨论】:

      【解决方案2】:

      我认为目前还没有任何最佳实践。

      System.exit(0);
      

      这就是 CTRL-C 的作用。它调用关闭挂钩并导致正常关闭。

      【讨论】:

      • +1 - 但是,我想补充一点,如果您像我一样,并且尝试在实际的 HTTP 资源中执行此操作(例如,某种服务仪表板可能使用的受保护的管理资源关闭服务)确保您异步调用 System.exit(0)(即在未来),否则它实际上不会干净地关闭所有内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2015-11-26
      • 2020-07-08
      • 2013-07-04
      • 2010-11-17
      相关资源
      最近更新 更多