问题 使用带有Spring Annotations的ehcache 3(不使用Spring Boot)


我试图让Ehcache 3在不使用Spring引导的情况下使用Spring 4。

这是一个使用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注释。


13038
2017-09-08 09:05


起源

使用正确的ehcahce 3版本,即支持的版本。 - M. Deinum
那是哪一个?谢谢! - Håvard Geithus
再来看看吧。使用ehcache3时,你必须在Spring中使用jcache抽象(你仍然可以使用spring注释,但是对于配置你必须使用jcache工厂)。否则使用ehcache2。我的错误抱歉。 - M. Deinum
谢谢!我会试试的。我稍后会告诉你它是怎么回事。 - Håvard Geithus
有兴趣知道你在哪里获得了文章的链接?它仍然可以从 ehcache.org/blog 但由于某些原因,URL似乎存在“日期”差异...... - Louis Jacomet


答案:


实际上,在Spring Caching中没有Ehcache 3的原生支持。

好消息是,你实现了你想要的东西 JCache支持 自从Ehcache 3出现以来,Spring Caching就已经存在了 兼容的JCache实现。 一旦你有了JCache CacheManager 在您的应用程序上下文中可用,没有任何东西强迫您使用JCache注释。您可以毫无问题地继续使用Spring Caching。

你可以找到它的演示 这里

注意:我正在研究Ehcache


11
2017-09-09 08:16



谢谢你清理,这个谈话真的很有帮助!我在设置中做错的一件事就是在我的Ehcache 3配置中输入我的缓存。然后当Spring的JCacheCacheManager在底层CacheManager(在我的例子中是Eh107CacheManager)上调用getCache(cacheName)时,它最终抛出IllegalArgumentException:Cache [cacheName]指定键/值类型。使用getCache(String,Class,Class)。 - Håvard Geithus
+1,我也遇到这个问题,我认为这是一个在Spring中使用Ehcache3.x的bug(或者可能是不支持的功能),我们无法定义“key-type”和“value-type”属性ehcache.xml - Rocky Hu
是否可以将Ehcache3与Spring ACL一起使用? - Sharadr


这是ehcache 2到3所有必需更改的简单工作示例: https://imhoratiu.wordpress.com/2017/01/26/spring-4-with-ehcache-3-how-to/

这是新配置的链接:


4
2017-11-29 21:39