- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我故意在我的类路径中有几个不同的缓存提供程序。我有用于分布式缓存的 Hazelcast 和用于本地缓存的 Caffeine。我正在尝试使用 JCache (JSR107) 注释来缓存我的值。
我已经创建了一个 CacheResolverFactory,它将能够检测要从哪个提供者使用哪个缓存管理器(基于方法注释),但是当我启动我的应用程序时,我收到以下错误消息:
Exception in thread "Thread-2" javax.cache.CacheException: Multiple CachingProviders have been configured when only a single CachingProvider is expected
at javax.cache.Caching$CachingProviderRegistry.getCachingProvider(Caching.java:386)
at javax.cache.Caching$CachingProviderRegistry.getCachingProvider(Caching.java:361)
at javax.cache.Caching.getCachingProvider(Caching.java:151)
at org.jsr107.ri.annotations.DefaultCacheResolverFactory.<init>(DefaultCacheResolverFactory.java:59)
at org.jsr107.ri.annotations.cdi.CacheLookupUtil.<init>(CacheLookupUtil.java:45)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
显然,我知道我有多个缓存提供程序。但是,我似乎无法找到解决这个问题的方法。 org.jsr107.ri.annotations.cdi.CacheLookupUtil
类有一个私有(private)的 CacheResolverFactory 成员,它在构造时被初始化为 DefaultCacheResolverFactory(),它需要一个 CacheProvider。
public class CacheLookupUtil extends AbstractCacheLookupUtil<InvocationContext> {
@Inject
private BeanManagerUtil beanManagerUtil;
private CacheKeyGenerator defaultCacheKeyGenerator = new DefaultCacheKeyGenerator();
private CacheResolverFactory defaultCacheResolverFactory = new DefaultCacheResolverFactory();
...
...
}
有什么办法可以避免这个问题吗? JCache ONLY 可以与 1 个缓存提供程序一起使用吗? CacheLookupUtil
类是字段 @Inject
ed 到所有注释处理器中。
覆盖所有拦截器(并提供自定义拦截器)并创建我自己的 CacheLookupUtil 实现是我唯一的选择吗?还是我可以做其他事情?
最佳答案
JCache 支持多个缓存提供程序。
您需要为注释处理器激活您的自定义缓存提供程序。像这样:
@CacheDefaults(cacheResolverFactory=LocalCacheResolver.class)
public class SomeService {
// methods with caching annotations
}
关于 RI 注释的注意事项:我对用法有复杂的感觉。一般来说,它是 JCache 标准的引用实现的一部分。整个 JCache 引用实现 (RI) 并不打算在生产中使用,而是为了验证标准而创建的。 Greg Luck 于 2014 年在此处传播了使用 RI 的注释处理,请参阅:How JSR107 Caching Annotations are meant to be used .但是,这意味着在相关的其他实现可用之前作为中间解决方案。
关于java - 具有多个缓存提供程序的 JCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343430/
我将 JCache 与 Hibernate 一起使用,如下所示: org.hibernate hibernate-jcache
我正在使用 JCache 来缓存 Web 响应。缓存键包含以下字段: Controller :字符串 操作:字符串 参数:数组 我创建了 ResponseKey 类并将其用作缓存键类型: public
我正在使用jquery的jCache插件http://plugins.jquery.com/project/jCache缓存我在刷新之间计算的一些数据,问题是,页面刷新后,缓存的数据似乎丢失了。
我故意在我的类路径中有几个不同的缓存提供程序。我有用于分布式缓存的 Hazelcast 和用于本地缓存的 Caffeine。我正在尝试使用 JCache (JSR107) 注释来缓存我的值。 我已经创
我使用 JCache 和 Infinispan 作为其实现。 JCache没有提供任何与集群相关的API,因此我在XML配置文件中定义了简单的复制缓存配置:
我使用了 JCache 和 EhCache 作为提供者。使用 MBean,我能够获得缓存统计信息,但缺少诸如缓存大小之类的属性。我看到 LiveCacheStatistics 提供了它,但是如何从 J
集群失效键值缓存仅通过网络发送删除命令。当一个节点上的某个键的值被更改或删除时,删除命令会与该键一起发送到每个其他节点,因此他们需要在下次需要时从持久存储中获取该数据(或重新计算它)。 我的问题是:基
正如我的问题标题所说,Memcache 是否应该与 Google 云端点配合良好?在本地,我可以使用 JCache 存储键/值对在我的应用程序中,并从 Google Cloud Endpoints A
我想将内容缓存在 JavaEE 应用程序服务器的 Java 堆上的数据库表中,如下所示。 | group | key | value
我有一个使用 Spring 缓存注释的 Spring Boot 应用程序。现在我想迁移到 JSR-107 (JCache) 注释。 这是我的方法: @Cacheable(value = "result
我正在将 JCache 注释与 Spring 和 EhCache 一起使用。如果我在方法上使用 @CacheResult 而不指定缓存名称(或类上的 @CacheDefaults),则默认缓存名称将解
假设我想缓存昂贵方法调用的结果。这些缓存条目应该有不同的过期时间(又名 TTL)。如果将条目放入同一个缓存实例中,这对于 JCache 是否可行? 我知道我可以为每个缓存分配不同的 ExpiryPol
在我看来,JCache EntryListener 的回调机制有问题。我正在尝试设置几个 jcache 成员(hazelcast 实现),每个成员在我的本地计算机上作为单个 java 应用程序运行(目
我们正在尝试以这样的方式实现 JCache,以便我们可以轻松地交换任何符合 JSR-107 的缓存提供程序。我们使用 Spring,我们的 CachingProvider Bean 如下所示: @Be
我想要一个保存项目列表的缓存。这是我的 bean 定义: public Cache> getMyCacheManager(CacheManager manager) { Cache> cach
请注意:如果这个问题中提到的缓存系统的工作方式彼此完全不同,以至于几乎不可能回答这个问题,那么我会将这个问题简化为仅兼容 JCache (JSR107) 的任何问题。 分布式缓存游戏中的主要参与者(至
我正在尝试使小型 Hazelcast 集群与简单的 JCache 兼容客户端协作。不幸的是,我得到了异常:“java.lang.IllegalArgumentException:没有使用名称注册的服务
假设我编写了一个库并希望缓存一些长时间运行或脆弱任务的结果。为此,我使用 JCache我的代码中的 API。 所以我的pom.xml将包含一个依赖项,例如 javax.cache c
我正在使用 JCache API 在我的应用程序中配置缓存,该应用程序将 spring 缓存与 Ehcache 3 结合使用。 cacheManager.createCache("users", ne
在我的 Spring+JCache+ehcache 3.5 项目中,我有一个方法应该清除两个缓存。 我试过: @CacheRemoveAll(cacheName = "cache1") @CacheR
我是一名优秀的程序员,十分优秀!