【问题标题】:Using ehcache 3 with Spring Annotations (not using Spring Boot)使用带有 Spring Annotations 的 ehcache 3(不使用 Spring Boot)
【发布时间】:2017-01-16 03:27:21
【问题描述】:

我正在尝试让 Ehcache 3 在不使用 Spring 启动的情况下与 Spring 4 一起工作。

Here is a working example out there which uses Spring Boot,但我正在开发一个未使用 Spring Boot 的现有应用程序。

问题在于 spring-context-support(它添加了 Spring 的缓存注释)期望 Ehcache 的 CacheManager 在这个类路径上:net.sf.ehcache.CacheManager

但是,在 Ehcache 3 中,CacheManager 类驻留在另一个类路径中:org.ehcache.CacheManager。

所以,基本上 spring-context-support 不支持 Ehcache 3。你必须直接使用 JSR-107 注释,而不是 Spring 提供的注释。

但显然它适用于 Spring Boot。也许有一种方法可以让它与标准的 Spring 应用程序一起工作。这就是我所希望的。我真的很想使用 Spring 自己的注释而不是 JSR-107 注释。

【问题讨论】:

  • 使用正确的 ehcahce 3 版本,即受支持的版本。
  • 那是哪一个?谢谢!
  • 再读一遍。使用 ehcache3 时,您必须将 jcache 抽象与 Spring 一起使用(您仍然可以使用 spring 注释,但对于配置,您必须使用 jcache 工厂)。否则使用ehcache2。对不起,我的错误。
  • 谢谢!我会试试的。稍后我会告诉你进展如何。
  • 有兴趣知道您从何处获得该文章的链接?仍然可以从ehcache.org/blog 访问它,但由于某种原因,URL 中似乎存在“日期”差异...

标签: spring spring-boot ehcache spring-4 jsr107


【解决方案1】:
【解决方案2】:

Spring Caching 中确实没有对 Ehcache 3 的原生支持。

好消息是,您可以使用 Spring Caching 的 JCache support 实现您想要的,因为 Ehcache 3 是 compliant JCache implementation。 一旦您的应用程序上下文中有可用的 JCache CacheManager,就不会强迫您使用 JCache 注释。您可以继续使用 Spring Caching 没有任何问题。

你可以找到那个here的演示。

注意:我正在研究 Ehcache

【讨论】:

  • 感谢您的澄清,那次谈话真的很有帮助!我在设置中做错的一件事是在我的 Ehcache 3 配置中输入我的缓存。然后,当 Spring 的 JCacheCacheManager 在底层 CacheManager(在我的情况下为 Eh107CacheManager)上调用 getCache(cacheName) 时,它最终抛出 IllegalArgumentException: Cache [cacheName] 指定键/值类型。使用 getCache(String, Class, Class)。
  • +1,我也遇到这个问题,我认为这是Spring中使用Ehcache3.x的一个错误(或者可能是不支持的功能),我们无法定义“key-type”和 ehcache.xml 中的“值类型”属性
  • 是否可以将 Ehcache3 与 Spring ACL 一起使用?
  • @Sharadr 你试过使用spring ACL吗?成功了吗?
最近更新 更多