Hazelcast客户端-服务端部署中ClassNotFoundException问题排查
问题:Hazelcast客户端-服务端模式下ClassNotFoundException触发场景与根源分析
环境与架构
- Kubernetes环境中的Spring Boot应用,采用Hazelcast客户端-服务端部署模式
- 核心缓存依赖:Spring缓存注解、Hibernate二级缓存,部分场景通过Hazelcast实例手动执行缓存读写
缓存Map配置(已为key添加排序索引)
val userOrderConfig = MapConfig(Caches.USER_ORDERS) userOrderConfig.apply { this.evictionConfig = EvictionConfig().setEvictionPolicy(EvictionPolicy.LRU).apply { this.maxSizePolicy = MaxSizePolicy.PER_NODE this.size = 10000 } this.timeToLiveSeconds = (30*60) } userOrderConfig.addIndexConfig(IndexConfig(IndexType.SORTED, "__key")) hzInstance.config.addMapConfig(userOrderConfig)
缓存读写示例代码
val map = hz.getMap<String, List<UserOrder>>(Caches.USER_ORDERS) val key = "${userId}-${otherParameter}" val result = map[key] if (result != null) result else { // 业务逻辑处理 map.put(key, result) return result }
缓存清理代码
fun clearUserOrderCache(userId: Int){ val key = "${userId}" thread { try { val map = hz.getMap<String, List<UserOrder>>(Caches.USER_ORDERS) map.removeAll(Predicates.like<String, List<UserOrder>>("__key", "$key-%")) } catch (ex: Exception) { ex.printStackTrace() } } }
问题现象
此前代码运行完全正常,缓存的更新、读取、清理逻辑均符合预期;但在未修改任何代码的情况下,val result = map[key]操作突然抛出异常,异常根因为:
java.lang.ClassNotFoundException: com.example.app.models.dtos.UserOrder
初步分析
推测触发路径为:Hazelcast服务端执行GetOperation时,会检查目标缓存记录是否过期;若记录过期,服务端会执行驱逐操作并移除对应索引;而在索引移除过程中,需要反序列化缓存值,但服务端类路径中不存在UserOrder类,因此抛出ClassNotFoundException。
核心疑问
已掌握若干可行的解决办法,现需明确:
- 该异常场景的触发条件
- 此类类路径不一致问题的根源
内容的提问来源于stack exchange,提问作者jetro157
相关产品推荐
相关产品推荐

