在应用程序启动时,我尝试创建这样的缓存:
我用来创建缓存的代码如下:
final Configuration entityConfiguration = myCacheManager.getCacheConfiguration( "entity" );
Objects.requireNonNull( entityConfiguration );
myCacheManager.createCache( "XXXX", entityConfiguration );
这会导致以下异常:
org.infinispan.commons.CacheConfigurationException: ISPN000373: Attempted to start a cache using configuration template 'XXXX'
at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:616)
at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:589)
at org.infinispan.manager.DefaultCacheManager.internalGetCache(DefaultCacheManager.java:475)
at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:461)
at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:447)
at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:413)
我理解这个例外意味着我不能有一个与缓存模板同名的缓存。
我查看了org.infinispan.manager.DefaultCacheManager
(版本 9.2.5.Final)并找到了这个实现:
@Override
public <K, V> Cache<K, V> createCache(String name, Configuration configuration) {
defineConfiguration(name, configuration);
return getCache(name);
}
这定义了一个带有传入名称的配置。在这种情况下"XXXX"
,然后继续尝试创建一个具有完全相同名称的缓存。
在调用getCache(name)
it 时调用wireAndStartCache
which 检查配置是否与缓存名称相同。总是这样,因为前面的代码传递了完全相同的字符串。我不明白这种方法怎么可能奏效。
如何避免此错误并创建缓存?