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

如何配置Ehcache 3集群JCache并获取javax.cache.CacheManager

如何获取具备集群能力的javax.cache.CacheManager?

按照Ehcache官方文档创建集群缓存时,得到的是实现org.ehcache.CacheManager的PersistentCacheManager,但我的Spring 6应用需要的是javax.cache.CacheManager。在Ehcache JSR107文档中未找到关于集群的明确说明,请问如何获取具备集群能力的javax.cache.CacheManager?

原集群CacheManager配置示例代码:

CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder =
    CacheManagerBuilder.newCacheManagerBuilder() 
        .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost/my-application")) 
            .autoCreateOnReconnect(c -> c)); 
PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(true); 

解决方案

Ehcache的JSR-107(JCache)实现完全支持集群模式,你可以通过两种方式获取具备集群能力的javax.cache.CacheManager:

方式一:直接通过JCache API配置集群

通过CachingProvider传入集群相关属性来创建JCache管理器:

import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.spi.CachingProvider;
import java.util.HashMap;
import java.util.Map;

// 获取Ehcache的JCache提供器
CachingProvider cachingProvider = Caching.getCachingProvider();

// 配置集群连接属性
Map<String, Object> clusterProps = new HashMap<>();
// 指定Terracotta集群地址
clusterProps.put("org.ehcache.cluster.uri", "terracotta://localhost/my-application");
// 配置重连时自动创建集群资源
clusterProps.put("org.ehcache.cluster.auto-create", "true");

// 创建具备集群能力的JCache CacheManager
CacheManager jCacheManager = cachingProvider.getCacheManager(null, null, clusterProps);

方式二:基于已有Ehcache集群管理器转换

如果你已经构建了Ehcache的PersistentCacheManager,可以将其适配为JCache的CacheManager:

import org.ehcache.CacheManagerBuilder;
import org.ehcache.clustered.ClusteringServiceConfigurationBuilder;
import org.ehcache.spi.persistence.PersistentCacheManager;
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.spi.CachingProvider;
import java.net.URI;

// 先构建Ehcache集群PersistentCacheManager
CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder =
    CacheManagerBuilder.newCacheManagerBuilder()
        .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost/my-application"))
            .autoCreateOnReconnect(c -> c));
PersistentCacheManager ehcacheManager = clusteredCacheManagerBuilder.build(true);

// 获取JCache提供器并转换
CachingProvider cachingProvider = Caching.getCachingProvider();
CacheManager jCacheManager = cachingProvider.getCacheManager(ehcacheManager.getURI(), null);

注意事项

  1. 确保Terracotta集群服务器已启动,且地址配置正确
  2. 项目依赖需包含Ehcache集群和JCache模块(以Maven为例):
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache-clustered</artifactId>
    <version>3.10.0</version>
</dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache-jcache</artifactId>
    <version>3.10.0</version>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:52:43