我有一个多模块项目,所有模块都在自己的ehcache.xml中定义了它们的缓存配置。这个用例由现在未维护的“ehcache-spring-annotations”项目通过如下配置来解决:
<ehcache:annotation-driven cache-manager="ehCacheManager" create-missing-caches="true"/>
<bean id="ehCacheManager" class="net.sf.itcb.addons.cachemanager.ItcbEhCacheManagerFactoryBean">
<property name="configLocations" value="classpath*:ehcache.xml"/>
<property name="shared" value="true"/>
</bean>
我在Spring的Cache Abstraction中尝试了类似的东西。
<cache:annotation-driven/>
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cache-manager-ref="ehcache"/>
<bean id="ehcache"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:config-location="classpath*:ehcache.xml"/>
然而,我遇到了这个例外:
Caused by: java.io.FileNotFoundException:
class path resource [classpath*:ehcache.xml] cannot be opened because
it does not exist
有人能解释一下在多模块项目中为EhCache配置Spring缓存抽象的正确方法吗?
3条答案
按热度按时间3phpmpom1#
如果你想在一个Spring上下文中有多个
CacheManagers
,你必须定义多个bean并为它们添加限定符,以便能够根据上下文区分它们。所以这里没有什么特定的缓存,它是Spring中相同类型的经典多个bean。
8cdiaqws2#
最后,我们放弃了ehcache.xml,开始使用基于Java的缓存配置来解决这个问题。
dly7yett3#
通过以不同的方式创建该高速缓存管理器来做到这一点,因为spring不允许上下文中有两个EhCacheManagerFactoryBean,并且configlocation在bean创建后不久就设置了,因此无法更新。