2016-01-22 68 views
1

我們試圖以這種方式實現JCache,因爲我們可以輕鬆地交換任何符合JSR-107的緩存提供程序。我們正在使用Spring和我們CachingProvider豆看起來是這樣的:JCache的Spymemcached的完全限定名稱

@Bean 
public CachingProvider cachingProvider() { 
    CachingProvider cachingProvider = Caching.getCachingProvider(env.getProperty("jcache.provider.fullyQualifiedName")); 
    return cachingProvider; 
} 

這讓我們換入或換出任何兼容的緩存,我們將通過我們的物業將完全合格的名稱,如文件,當然加上罐子類路徑。目前實施Hazelcast我們的配置文件看起來是這樣的:

jcache.provider.fullyQualifiedName=com.hazelcast.cache.HazelcastCachingProvider 

不過,我想實現spymemcached這個然而,我無法找到這樣做的完全限定域名(或任何其他JSR-107兼容的實現) 。

所以我的問題是沒有人知道Spymemchaced或任何其他符合JSR-107的緩存提供程序的完全限定名稱?我用Google搜索了一下,但一直沒能找到任何東西。

+1

由於memcached不支持迭代,完全兼容的memcached提供程序是不可能的。 EntryProcessors更難,但可以使用分佈式鎖來模擬。有特設的提供者,像[這一個](https://github.com/linux-china/spymemcached-jcache)。提供者的合格名稱存儲在jar的'META-INF/services/javax.cache.spi.CachingProvider'文件中 –

回答

2

如果你想通過添加一個不同的jar來切換你的緩存提供者,最好的答案是:只要做到這一點!你不需要任何額外的配置。

您只能使用Caching.getCachingProvider()。這將返回您添加到應用程序(即在類路徑中)的兼容JSR107的緩存提供程序。在內部它使用的是服務提供者接口機制,請參閱:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html

問題就變得更復雜,當你想在同一時間一個應用中使用不同的緩存供應商。正如Ben在他的評論中所建議的那樣,您可以在jar文件中查看spi文件,或者,您可以通過Caching.getCachingProviders()進行迭代。要獲得完全限定名稱,請輸入getClass().getName()

+0

這也是我原來的理解,但似乎並不奏效。如果我用你的例子替換,我得到這個錯誤:導致:javax.cache.CacheException:沒有CachingProviders已配置 在javax.cache.Caching $ CachingProviderRegistry.getCachingProvider(Caching.java:381) 在javax.cache.Caching $ CachingProviderRegistry.getCachingProvider(Caching.java:351) at javax.cache.Caching.getCachingProvider(Caching.java:142) – DavidR

+0

好吧,我決定再次測試這種方式。我不知道,但這次它正在工作! – DavidR

+0

完美。順便說一句:你的問題有點像類加載問題。 – cruftex

相關問題