多模块项目中多个 ehcache.xml 文件的基于单个 Spring 的 ehcache 管理器

Single Spring based ehcache manager for multiple ehcache.xml files in a multi module project

我有一个多模块项目,所有模块都在自己的 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: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 的缓存抽象的正确方法是什么吗?

如果您想在单个 Spring 上下文中使用多个 CacheManagers,则必须定义多个 bean 并向它们添加限定符,以便能够根据某些上下文区分它们。

所以这里没有什么特定的缓存,就是Spring中经典的同类型多bean。

最后,我们放弃了 ehcache.xml,开始使用基于 Java 的缓存配置,解决了这个问题。