spring - 在多个模块中使用 Spring 缓存注解

标签 spring caching annotations ehcache spring-annotations

我有一个 util 模块,它可以生成一个用于其他应用程序的 jar。我希望这个模块使用缓存,并且更喜欢使用 Spring 的 annotation-driven 缓存。

所以 Util-Module 会有这样的东西:


DataManager.java

...
@Cacheable(cacheName="getDataCache")
public DataObject getData(String key) { ... }
...

数据管理器-ehcache.xml

...
<cache name="getDataCache" maxElementsInMemory="100" eternal="true" />
...

data-manager-spring-config.xml

...
<cache:annotation-driven cache-manager="data-manager-cacheManager" />
<!-- ???? --->
<bean id="data-manager-cacheManager" 
    class="org.springframework.cache.ehcache.EhcacheCacheManager" 
    p:cache-manager="data-manager-ehcache"/>
<bean id="data-manager-ehcache" 
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
    p:config-location="data-manager-ehcache.xml"/>
...

我还希望我的可部署单元通过 Spring 注释进行缓存,同时将上述 jar 作为依赖项。所以我的 Deployable-Unit 会有这样的东西:


MyApp.java

...
@Cacheable(cacheName="getMyAppObjectCache")
public MyAppObject getMyAppObject(String key) { ... }
...

my-app-ehcache.xml

...
<cache name="getMyAppObjectCache" maxElementsInMemory="100" eternal="true" />
...

my-app-spring-config.xml

...
<cache:annotation-driven cache-manager="my-app-cacheManager" />
<!-- ???? --->
<bean id="my-app-cacheManager" 
    class="org.springframework.cache.ehcache.EhcacheCacheManager" 
    p:cache-manager="my-app-ehcache"/>
<bean id="my-app-ehcache" 
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
    p:config-location="my-app-ehcache.xml"/>
...

问题:

是否可以在主项目和依赖模块中使用注释驱动的缓存,同时保持配置分离?

如果不是,请解释为什么不是。如果是这样,将不胜感激对上述配置中需要更改的内容的解释。

最佳答案

使用此类:http://static.springsource.org/autorepo/docs/spring/3.2.0.M1/api/org/springframework/cache/support/CompositeCacheManager.html 像这样:

<cache:annotation-driven cache-manager="cacheManager" />

<bean id="cacheManager" class="org.springframework.cache.support.CompositeCacheManager">
    <property name="cacheManagers">
        <array>
            <ref bean="cacheManager1" />
            <ref bean="cacheManager2" />
        </array>
    </property>
    <property name="addNoOpCache" value="true" />
</bean>

关于spring - 在多个模块中使用 Spring 缓存注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658789/

相关文章:

java - 验证变量为空警告

spring - 如何确保 https 仅用于 apache tomcat 中的某些 Web 服务

java - Spring MVC 中的 JSON 动态列表

java - 使用 Spring JDBCTemplate 更新结果集

sql - 当我(手动)将表值函数的结果缓存在临时表中时,为什么查询执行得如此之快?

java - 将数组传递给注释的语法

spring - 如何在 Spring MVC 中映射多个 Controller

.net - 如何不删除其他对象引用的缓存项

java - 如果数据频繁变化,应该使用什么类型的java缓存?

java - 类文件中的注释存储在哪里