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

Jetty从9.3.27升级至9.4.43构建成功但部署报错Shared scheduler not started

问题原因

Jetty 9.4.x版本对会话管理组件的生命周期依赖逻辑做了不兼容调整:

  • 9.3.x版本中,手动实例化的HouseKeeper会自动关联所属Server实例的共享调度器,无需额外配置
  • 9.4.x版本后,手动创建的HouseKeeper不会自动绑定Server的调度器,启动时就会抛出Shared scheduler not started异常,你的报错栈里HouseKeeper.startScavenging方法的校验逻辑就是触发这个异常的直接原因。

修复方案

推荐使用第一种方案,改动最小且符合Jetty 9.4的设计规范:

方案一:使用DefaultSessionIdManager自带的HouseKeeper实例

DefaultSessionIdManager初始化时已经自动绑定了Server的共享调度器,直接获取内置实例修改配置即可,不需要手动new HouseKeeper:

DefaultSessionIdManager defaultSessionIdManager = new DefaultSessionIdManager(server);
// 直接获取内置的HouseKeeper实例
HouseKeeper houseKeeper = defaultSessionIdManager.getSessionHouseKeeper();
houseKeeper.setIntervalSec(30);
server.setSessionIdManager(defaultSessionIdManager);

方案二:手动为自定义HouseKeeper绑定调度器

如果确实需要使用自定义的HouseKeeper实例,手动注入Server的共享调度器即可:

DefaultSessionIdManager defaultSessionIdManager = new DefaultSessionIdManager(server);
HouseKeeper houseKeeper = new HouseKeeper();
// 手动绑定Server的共享调度器
houseKeeper.setScheduler(server.getScheduler());
houseKeeper.setIntervalSec(30);
defaultSessionIdManager.setSessionHouseKeeper(houseKeeper);
server.setSessionIdManager(defaultSessionIdManager);

修改后重新执行/gradlew clean run即可正常启动。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:09:00