Ehcache 3及以上版本如何实现动态配置,替代v2的dynamicConfig属性
Ehcache 3 动态配置实现方案
Ehcache 3 版本已经移除了 v2 版本的 dynamicConfig 开关属性,默认支持运行时动态修改可调整的缓存参数,不需要在XML配置文件中额外添加属性开启。
可动态修改的参数范围
仅支持修改缓存运行时可调参数,不可变参数修改需要销毁重建缓存:
- 可调参数:TTL过期时间、堆/堆外/磁盘的资源容量阈值
- 不可调参数:缓存别名、键值类型、持久化配置、监听器配置、序列化策略等
具体实现步骤(Java API)
通过XML配置初始化的缓存,可以直接通过Ehcache提供的运行时API修改配置,示例代码如下:
1. 获取CacheManager和目标缓存实例
import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.CacheRuntimeConfiguration; import org.ehcache.config.builders.ExpiryPolicyBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; import org.ehcache.core.config.ExpiryPolicyConfiguration; import org.ehcache.expiry.ExpiryPolicy; import java.time.Duration; // 此处替换为你项目中初始化完成的CacheManager实例 CacheManager cacheManager = ...; Cache<Object, Object> categoriesCache = cacheManager.getCache("categoriesCache", Object.class, Object.class); CacheRuntimeConfiguration<Object, Object> runtimeConfig = categoriesCache.getRuntimeConfiguration();
2. 动态修改TTL过期时间
// 把categoriesCache的过期时间修改为1800秒 runtimeConfig.updateExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(1800)));
3. 动态修改缓存资源容量
// 把堆容量调整为2000条,堆外调整为20MB,磁盘调整为50MB runtimeConfig.updateResourcePools( ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(2000) .offheap(20, MemoryUnit.MB) .disk(50, MemoryUnit.MB, true) .build() );
注意事项
- 调整资源容量时,新的容量不能小于当前已使用的容量,否则会调整失败
- 如果需要修改不可变参数,需要先调用
cacheManager.removeCache("缓存别名")销毁原有缓存,再用新的配置重新注册缓存即可
内容的提问来源于stack exchange,提问作者gheontreyjoy
相关产品推荐
相关产品推荐

