【发布时间】:2018-12-26 13:53:09
【问题描述】:
我正在使用基于 Spring 的应用程序(不是 Spring Boot),我正在尝试将 cache2k 作为 Spring 缓存管理器引入。
目前cache2k通过设置以下属性被用作Hibernate二级缓存
hibernate.cache.use_second_level_cache = true
hibernate.cache.region.factory_class = org.hibernate.cache.jcache.JCacheRegionFactory
hibernate.javax.cache.provider = org.cache2k.jcache.provider.JCacheProvider
带有如下cache2k.xml配置文件(仅与示例相关的部分)
<cache2k xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='https://cache2k.org/schema/v1.x'
xsi:schemaLocation="https://cache2k.org/schema/v1.x https://cache2k.org/schema/cache2k-core-v1.x.xsd">
<!-- The configuration example for the documentation -->
<version>1.0</version>
<skipCheckOnStartup>true</skipCheckOnStartup>
<ignoreMissingCacheConfiguration>true</ignoreMissingCacheConfiguration>
<defaults>
<cache>
<entryCapacity>100</entryCapacity>
</cache>
</defaults>
<templates>
<cache>
<name>lookupTable</name>
<expireAfterWrite>1d</expireAfterWrite>
<entryCapacity>50_000</entryCapacity>
</cache>
</templates>
<caches>
<cache>
<name>AdvertisingCategoryCache</name>
<include>lookupTable</include>
</cache>
</caches>
现在我想介绍一个 Spring 缓存管理器,并且在 cache2k 文档中有足够的信息来介绍它作为一个 Spring 缓存管理器,也可以使用以下代码
@EnableCaching
...
...
@Bean
public CacheManager cacheManager() {
return new SpringCache2kCacheManager();
}
最终目标是在需要但调用以下方法时,也在spring缓存层中重用现有的hibernate二级缓存
@Cacheable(cacheNames = "AdvertisingCategoryCache")
@Override
public AdvertisingCategory findById(Long id) {
// call to the repository
}
我收到以下错误
Cache already created: 'AdvertisingCategoryCache'
关键是我知道缓存已经创建。我的需要是重用现有的。
我该怎么做?
附:这个例子很简单,当然我可以直接删除@Cacheable 方法,但我使用它是为了简单解释我的情况。
【问题讨论】:
标签: caching spring-cache cache2k