我们的 Thorntail (2.4.0.Final) webapp 使用 Infinispan 作为JCache (JSR-107) 提供者。除了 JCache 的属性(例如按值存储选项)之外,我们还想修改 Infinispan 的特定属性(例如默认获取超时)。
我们当前的解决方案不起作用。这是我们迄今为止尝试过的。
- 定义
infinispan.xml
:
<infinispan
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:5.2 http://www.infinispan.org/schemas/infinispan-config-9.4.xsd"
xmlns="urn:infinispan:config:9.4">
<cache-container>
<local-cache name="foo">
<locking acquire-timeout="15000"/>
</local-cache>
</cache-container>
</infinispan>
- 上面的配置然后由以下类使用:
public class CacheManagerProducer {
@Produces
@ApplicationScoped
public CacheManager defaultEmbeddedCacheManager() {
return Caching.getCachingProvider().getCacheManager(URI.create("infinispan.xml"), this.getClass().getClassLoader());
}
}
FooCache
接口定义为:
@Qualifier
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FooCache {
}
- 以下是我们使用 JCache API 配置缓存的方式:
@Produces
@FooCache
public Cache<Long, DiscountOrAddition> createDiscoCache(InjectionPoint injectionPoint) {
MutableConfiguration<Long, DiscountOrAddition> config = new MutableConfiguration<>();
config.setStoreByValue(true);
config.setStatisticsEnabled(false);
config.setManagementEnabled(false);
return mgr.createCache("foo", config);
}
这是我们失败的地方,因为foo
缓存已经存在(根据 XML 配置创建)。有没有办法配置现有的缓存?或者任何其他允许我们保持缓存提供者不可知论的替代方式?谢谢您的回答。