Spring Boot集成EhCache核心是依赖引入+配置定义+注解驱动:需区分2.x(net.sf.ehcache)与3.x(org.ehcache+jakarta classifier),配置用对应XML或Java DSL,启用@EnableCaching后通过@Cacheable等注解实现JVM内高效本地缓存。

Spring Boot 集成 EhCache 做本地缓存,核心是“依赖引入 + 配置定义 + 注解驱动”,不依赖外部中间件,全程在 JVM 内完成,响应快、开销低。
添加正确的 Maven 依赖
注意版本匹配,尤其区分 EhCache 2.x 和 3.x:
- 若用 EhCache 2.x(兼容老项目、XML 配置习惯):
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency> - 若用 EhCache 3.x(推荐新项目,支持堆外/多层存储、JSR-107 标准):
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<classifier>jakarta</classifier>
</dependency> (JDK 11+ 必加classifier="jakarta") - 统一启用 Spring 缓存抽象:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
配置缓存策略(XML 或 Java Config)
Spring Boot 会自动加载 classpath 下的配置文件,但格式必须匹配版本:
-
EhCache 2.x → 使用
ehcache.xml(放在src/main/resources):
定义<cache name="user" maxElementsInMemory="1000" timeToLiveSeconds="300" />,支持overflowToDisk和diskPersistent。 -
EhCache 3.x → 使用
ehcache.xml或更推荐的ehcache.xml(v3 schema):
支持分层资源定义,例如:
<heap unit="entries">100</heap>
<offheap unit="MB">50</offheap>
还可配 TTL、key/value 类型、统计开关等。 - 也可完全不用 XML,通过
@Configuration+CacheManagerBean 手动构建,适合动态场景。
启用并使用缓存注解
三步走:开启、标记、触发:
- 在启动类上加
@EnableCaching,激活 Spring 缓存代理机制; - 在 Service 方法上使用标准注解:
@Cacheable(value = "user", key = "#id")—— 查缓存,未命中则执行方法并存入;@CachePut(value = "user", key = "#user.id")—— 总是执行方法,并更新缓存;@CacheEvict(value = "user", key = "#id")—— 执行后清除指定缓存项; - 确保方法是 public、非 final、被 Spring 容器管理(即用
@Service),否则 AOP 代理不生效。
验证与调优建议
集成后别跳过这几点:
- 加
logging.level.org.springframework.cache=DEBUG,看日志是否打印 “Cache entry for key […] was not found” 或 “Cached value”; - 避免缓存雪崩:不同 key 的 TTL 可加随机偏移,比如
timeToLiveSeconds="300 + Math.random()*60"(需代码控制); - 大对象慎用堆内缓存:若单条数据超几 MB,优先设
<offheap>或考虑 Caffeine; - EhCache 2.x 不再维护,新项目直接选 3.x;分布式场景请搭配 Redis,EhCache 专注单机高性能读。


















