Java17/SpringBoot3.1.5迁移时Hazelcast依赖出现HttpSession解析错误
SpringBoot 3.x与Hazelcast版本兼容问题排查
问题场景
将项目从Java 8迁移至Java 17,同时将SpringBoot从2.7.2升级到3.1.5,同步升级Hazelcast至hazelcast-all 5.0-BETA-1版本后,出现代码报错。
相关代码
import jakarta.servlet.http.HttpSession; import com.hazelcast.web.HazelcastHttpSession; HttpSession oldSession = request.getSession(); oldSession.invalidate(); //创建新会话 HttpSession session = request.getSession(true); if (session instanceof HazelcastHttpSession) { sessionService.setSessions(session.getId(), new Session(session.getId(), new Date(), username)); }
报错信息
- 无法解析类型javax.servlet.http.HttpSession,它是所需类型com.hazelcast.web.HazelcastHttpSession的间接引用
- 无法解析类型javax.servlet.http.HttpSession,它是所需类型com.hazelcast.web.WebFilter的间接引用
问题分析与解答
核心疑问
Hazelcast-all最新版本无法与SpringBoot 3.x兼容吗?看起来Hazelcast-all仍在使用javax.而非jakarta.。
分析与解决
是的,核心问题出在Hazelcast版本的Jakarta EE兼容性上:
- SpringBoot 3.x基于Jakarta EE 9+规范,所有Servlet相关API已从
javax.servlet迁移至jakarta.servlet包; hazelcast-all 5.0-BETA-1依赖旧的javax.servletAPI,与SpringBoot 3.x的Jakarta API包冲突,导致类解析错误。
解决方案:
- 升级Hazelcast至5.3及以上正式版:从5.3版本开始,Hazelcast全面支持Jakarta EE规范,将所有javax相关依赖替换为jakarta,完美适配SpringBoot 3.x;
- 临时桥接方案(不推荐):若需保留旧版Hazelcast,可添加Jakarta迁移桥接依赖,但可能引发其他兼容性问题,仅作为临时过渡使用。
注意:避免使用BETA版本的Hazelcast,正式GA版本的稳定性与兼容性更有保障。
内容的提问来源于stack exchange,提问作者Subodh Joshi
相关产品推荐
相关产品推荐

