Spring Framework 6.1迁移:javax.cache:cache-api:1.1.1是否兼容?
核心结论
你当前使用的javax.cache:cache-api:1.1.1完全无法在Spring Framework 6.1.1中正常工作——因为Spring 6.x基于Jakarta EE 9+规范,彻底移除了对javax命名空间API的兼容,所有javax相关的缓存类都会引发编译或运行时错误。
具体适配步骤
替换JCache API依赖
把原javax版本的API替换为Jakarta命名空间的官方实现:// 移除旧依赖 // implementation 'javax.cache:cache-api:1.1.1' // 添加新依赖 implementation 'jakarta.cache:jakarta.cache-api:2.1.1'版本选择建议:Jakarta Cache 2.x完全匹配Jakarta EE 9+规范,和Spring 6.1兼容性最佳。
升级Ehcache实现
原Ehcache 3.10.0仅支持javax.cache API,必须升级到支持Jakarta Cache的版本:// 移除旧依赖 // implementation 'org.ehcache:ehcache:3.10.0' // 添加新依赖 implementation 'org.ehcache:ehcache:3.19.0'注意:Ehcache从3.17.0版本开始正式支持Jakarta命名空间,建议选择3.17.0及以上的稳定版。
调整配置类的包导入
把配置类中所有javax.cache.*的导入替换为jakarta.cache.*,例如:// 替换前 // import javax.cache.CacheManager; // import javax.cache.Caching; // import javax.cache.configuration.MutableConfiguration; // 替换后 import jakarta.cache.CacheManager; import jakarta.cache.Caching; import jakarta.cache.configuration.MutableConfiguration;Spring自身的缓存注解(如
@Cacheable、@CacheEvict)仍使用org.springframework.cache包,无需修改。检查缓存配置文件(若有)
如果项目中使用了Ehcache的XML配置文件,若存在引用javax类的配置节点,需同步替换为jakarta对应类(多数情况下Ehcache自身配置无需调整,仅涉及JCache相关的自定义配置时需要)。
补充说明
Spring 6.1文档中提及的"JSR 107支持",实际指的是Jakarta Cache规范(原JSR 107的Jakarta迁移版),并非旧的javax.cache实现。由于你未使用Spring Boot,无需依赖Spring Boot的starter自动配置,只需手动完成上述依赖替换和代码调整即可。
内容的提问来源于stack exchange,提问作者redheaddev

