Hazelcast 5.1.5集成Spring @Cacheable报错:找不到指定缓存
问题排查与解决方案
问题原因分析
你遇到的Cannot find cache named 'cache_name'异常,核心原因有两点:
- 配置中同时定义了Hazelcast服务端的
ConfigBean和客户端的HazelcastInstanceBean,但Spring Cache未正确关联到客户端实例; - 服务端配置里的
MapConfig是给本地服务端节点用的,而你实际通过客户端连接远程集群,远程集群中可能不存在cache_name对应的Map,或者Spring Cache无法通过客户端实例定位到它。
修正后的配置代码
@Configuration @EnableCaching // 必须添加此注解开启Spring缓存功能 public class HazelcastConfig implements Serializable { @Value("${spring.application.name}") private String appName; @Bean public HazelcastInstance hazelcastInstance() { return HazelcastClient.newHazelcastClient(createClientConfig()); } private ClientConfig createClientConfig() { ClientConfig clientConfig = new ClientConfig(); clientConfig.setClusterName("hazelcast_mwga_cluster"); clientConfig.setInstanceName("hazelcast_mwga_cluster"); // 为指定缓存配置近缓存 clientConfig.addNearCacheConfig(createNearCacheConfig("cache_name")); return clientConfig; } private NearCacheConfig createNearCacheConfig(String cacheName) { NearCacheConfig nearCacheConfig = new NearCacheConfig(cacheName); nearCacheConfig.setInvalidateOnChange(true); nearCacheConfig.setInMemoryFormat(InMemoryFormat.OBJECT); nearCacheConfig.setEvictionConfig(new EvictionConfig()); return nearCacheConfig; } // 关键:绑定Hazelcast客户端实例到Spring CacheManager @Bean public CacheManager cacheManager(HazelcastInstance hazelcastInstance) { return new HazelcastCacheManager(hazelcastInstance); } }
关键调整说明
- 移除原有
ConfigBean:你使用客户端连接远程集群,这个服务端配置Bean无实际作用,反而会造成混淆; - 添加
@EnableCaching注解:开启Spring缓存自动配置,这是容易被忽略的核心步骤; - 显式配置
HazelcastCacheManager:将Spring Cache与Hazelcast客户端实例绑定,确保能正确识别集群中的缓存; - 调整近缓存配置:客户端的近缓存需在
ClientConfig中定义,而非服务端的MapConfig。
额外验证步骤
- 确认远程Hazelcast集群节点正常运行,且集群名称与客户端配置的
hazelcast_mwga_cluster一致; - 检查客户端连接日志,确认成功连接到集群;
- 如果集群未提前创建
cache_name的Map,确保集群允许动态创建Map(Hazelcast默认允许,若集群配置了禁用动态创建,则需提前在集群节点的配置中添加对应的MapConfig)。
内容的提问来源于stack exchange,提问作者DaniyalVaghar
相关产品推荐
相关产品推荐

