2016-09-08 106 views
9

我試圖讓Ehcache 3與Spring 4一起工作而不使用Spring引導。使用ehcache 3與Spring註解(不使用Spring Boot)

Here is a working example out there which uses Spring Boot,但我正在使用不使用Spring Boot的現有應用程序。

的問題是,彈簧上下文支持(增加了Spring的緩存註解)預計的Ehcache的CacheManager的是在這個類路徑:net.sf.ehcache.CacheManager

然而,在3的Ehcache的的CacheManager類駐留在另一個類路徑:org.ehcache.CacheManager中。

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

但顯然它適用於Spring Boot。也許有一種方法可以使它與標準的Spring應用程序一起工作。這就是我所希望的。我真的想使用Spring自己的註釋來代替JSR-107註釋。

+0

使用適當的ehcahce 3版本,受支持的版本。 –

+0

這是哪一個?謝謝! –

+1

只需再讀一遍。當使用ehcache3時,你必須在Spring中使用jcache抽象(你仍然可以使用spring註解,但對於配置你必須使用jcache工廠)。否則使用ehcache2。我的錯誤對不起。 –

回答

9

確實在Spring緩存中沒有Ehcache 3的本地支持。

好消息是,自從Ehcache 3成爲compliant JCache implementation以來,Spring Caching實現了JCache support即可達到您想要的效果。 一旦您的應用程序上下文中有可用的JCache CacheManager,則不會強制您使用JCache註釋。你可以繼續使用Spring緩存,沒有任何問題。

你可以找到一個演示here

注:我工作的Ehcache

+1

感謝您解決問題,說話真的很有幫助!我在我的設置中做錯了一件事是在我的Ehcache 3配置中輸入緩存。然後,當Spring的JCacheCacheManager在底層CacheManager(在我的情況下是Eh107CacheManager)上調用getCache(cacheName)時,它最終拋出IllegalArgumentException:Cache [cacheName]指定鍵/值類型。使用getCache(String,Class,Class)。 –

+0

+1,我也遇到這個問題,我認爲這是一個使用Ehcache3的錯誤(或者可能是不支持的功能)。x在Spring中,我們無法在ehcache.xml中定義「鍵類型」和「值類型」屬性 –

+0

是否可以在Spring ACL中使用Ehcache3? – Sharadr