You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jetty启动生命周期中注册钩子,在服务启停前后执行自定义代码

Jetty插入启动前/停止前自定义逻辑的实现方法

Jetty的核心服务组件均实现了LifeCycle接口,天然支持通过注册生命周期监听器的方式插入自定义回调逻辑,无需改动原有启动流程的核心结构。

具体实现步骤

你只需要给Server实例注册LifeCycle.Listener监听器,重写对应回调方法即可:

  • lifeCycleStarting方法:在Jetty服务器正式启动前触发,可写入启动前要执行的自定义代码
  • lifeCycleStopping方法:在Jetty服务器正式停止前触发,可写入停止前要执行的自定义代码

修改后的完整代码如下:

import org.eclipse.jetty.util.component.LifeCycle;

public class ExampleServer {

    public static void main(String[] args) throws Exception {
        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(8080);
        server.setConnectors(new Connector[] { connector });
        ServletContextHandler context = new ServletContextHandler();
        context.setContextPath("/hello");
        context.addServlet(HelloServlet.class, "/");
        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[] { context, new DefaultHandler() });
        server.setHandler(handlers);

        // 注册生命周期监听器插入自定义逻辑
        server.addLifeCycleListener(new LifeCycle.Listener() {
            @Override
            public void lifeCycleStarting(LifeCycle event) {
                // 此处写入服务器启动前要执行的自定义代码
                System.out.println("Jetty即将启动,执行前置逻辑");
            }

            @Override
            public void lifeCycleStopping(LifeCycle event) {
                // 此处写入服务器停止前要执行的自定义代码
                System.out.println("Jetty即将停止,执行前置逻辑");
            }
        });

        server.start();
        server.join();
    }
}

注意事项

  • 如果启动前的自定义逻辑抛出异常,会直接终止Jetty的启动流程,适合用于配置校验、基础资源初始化这类前置校验操作
  • 停止前的自定义逻辑不要执行过长耗时操作,Jetty默认的停止超时为30秒,超时后会强制终止进程
  • 如果你需要插入的是Servlet上下文级别的启停逻辑,也可以给ServletContextHandler注册监听器,触发时机对应上下文的启停周期,和Server级别的监听器互相独立

内容的提问来源于stack exchange,提问作者Finlay Weber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:30:02