Java 嵌入式防波堤与优雅停车

Java 嵌入式防波堤与优雅停车,java,jetty,Java,Jetty,我已经翻阅了Jetty文档,试图找到如何正确配置嵌入式Jetty以正常关闭,但我发现它缺乏 中的示例不合理地使用了setStopAtShutdown(true)。但是,没有JavaDoc或解释为什么要这样做。据我所知,默认值设置为false 另外,setGracefulShutdown()方法,但也没有文档记录 以下是我的问题: 为什么在关机时设置或不设置停止 何时覆盖停止超时(默认为30秒) 在配置Jetty以实现正常关机时,还应考虑哪些事项 编辑: 经过一些尝试和错误;发现如果您想让Jett

我已经翻阅了Jetty文档,试图找到如何正确配置嵌入式Jetty以正常关闭,但我发现它缺乏

中的示例不合理地使用了
setStopAtShutdown(true)
。但是,没有JavaDoc或解释为什么要这样做。据我所知,默认值设置为false

另外,
setGracefulShutdown()
方法,但也没有文档记录

以下是我的问题:

  • 为什么在关机时设置或不设置停止
  • 何时覆盖停止超时(默认为30秒)
  • 在配置Jetty以实现正常关机时,还应考虑哪些事项
  • 编辑:
    经过一些尝试和错误;发现如果您想让Jetty向任何侦听器(如Spring的ContextLoaderListener)发送关闭事件信号,则需要setStopAtShutdown(true)

    默认的
    stopAtShutdown
    似乎为真,请参见,超时也在那里,5秒:

    <Set name="stopAtShutdown">true</Set>
    <Set name="stopTimeout">5000</Set>
    

    我知道这不能直接解决您的问题,但也许您可以向我们提供更多信息。

    优雅的关闭过程要求每个工作线程关闭(即完成当前请求的处理,然后不接受任何新请求并退出)。然后它会等待一段时间(可通过超时配置),如果还有线程,它会强制杀死它们。这可能是因为线程处理请求需要很长时间,或者是因为死锁。如果保留默认值30秒,则可能需要30秒多一点的时间才能退出应用程序。减少超时值将加快关机时间,但代价是可能会杀死忙于处理合法活动请求的线程。

    最难的问题是停止正确部署的应用程序,而不是jetty本身。特别是在查询、线程池等复杂的情况下。我个人更喜欢使用带看门狗的嵌入式jetty,并通过终止进程来阻止它。从用法的角度来看,这可能是不正确的,但始终有效。我正要问setStopTimeout()上的单位是多少,但从上面看,它是毫秒。应该更好地记录Server.setStopTimeout()和所有被重写的基类方法。
    <Configure id="Server" class="org.eclipse.jetty.server.Server">
      ...
      <Call name="addConnector">
        <Arg>
          <New class="org.eclipse.jetty.server.ServerConnector">
            ...
            <Call name="addLifeCycleListener">
              <Arg>
                <New class="com.acme.jetty.ConnectorListener"/>
              </Arg>
            </Call>
    
    package com.acme.jetty;
    
    import org.eclipse.jetty.util.component.LifeCycle;
    
    import org.eclipse.jetty.util.log.Log;
    import org.eclipse.jetty.util.log.Logger;
    
    public class ConnectorListener implements LifeCycle.Listener {
        private static final Logger LOG = Log.getLogger(ConnectorListener.class);
        ...
        public void lifeCycleStopped(LifeCycle event) {
            LOG.debug("lifeCycleStopped()");
        }