【问题标题】:Fully qualified name of Spymemcached for JCacheJCache 的 Spymemcached 的完全限定名称
【发布时间】:2016-04-29 08:41:01
【问题描述】:

我们正在尝试以一种可以轻松交换任何符合 JSR-107 的缓存提供程序的方式来实现 JCache。我们正在使用 Spring,我们的 CachingProvider Bean 看起来像这样:

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

这允许我们通过在我们的属性文件中添加完全限定名称并当然将 jar 添加到类路径中来换入和换出我们想要的任何兼容缓存。目前,为了实现 Hazelcast,我们的配置文件如下所示:

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

但是,我想为此实现 spymemcached,但我无法找到它的完全限定名称(或任何其他符合 JSR-107 的实现)。

所以我的问题是,有没有人知道 Spymemchaced 或任何其他符合 JSR-107 的缓存提供程序的完全限定名称?我用谷歌搜索了又谷歌,但仍然无法提出任何建议。

【问题讨论】:

  • 由于 memcached 不支持迭代,完全兼容的 memcached 提供程序是不可能的。 EntryProcessors 更难,但可以使用分布式锁来模拟。有一些临时提供程序,例如this one。提供者的限定名称存储在 jar 的 META-INF/services/javax.cache.spi.CachingProvider 文件中

标签: java spring caching memcached


【解决方案1】:

如果您想通过添加不同的 jar 来切换缓存提供程序,最好的答案是:去做吧!您不需要为此进行任何额外配置。

您只能使用Caching.getCachingProvider()。这将返回您添加到应用程序(即在类路径中)的 JSR107 兼容缓存提供程序。内部使用的是服务提供者接口机制,见:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html

当您想在一个应用程序中同时使用不同的缓存提供程序时,情况会变得更加复杂。正如 Ben 在他的评论中建议的那样,您可以查看 jar 文件中的 spi 文件,或者您可以通过 Caching.getCachingProviders() 迭代它们。要获得完全限定名,请使用 getClass().getName() 打印类名。

【讨论】:

  • 这也是我最初的理解,但似乎不起作用。如果我替换为您的示例,则会收到此错误: 原因:javax.cache.CacheException: No CachingProviders has been configured at javax.cache.Caching$CachingProviderRegistry.getCachingProvider(Caching.java:381) at javax.cache.Caching$CachingProviderRegistry .getCachingProvider(Caching.java:351) 在 javax.cache.Caching.getCachingProvider(Caching.java:142)
  • 好的,我决定再用这种方式进行测试。我不知道,但这次它起作用了!
  • 完美。顺便说一句:你的问题有点像类加载问题。
  • 是的,我可能做出了改变,没有推动它......像那样奇怪的东西。仍在学习这一点并进行大量更改和测试。
猜你喜欢
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 2019-10-09
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多