使用Spring Caching为多个Web应用程序配置singleton CacheManager

时间:2014-05-15 18:48:25

标签: spring caching ehcache spring-cache

我在Tomcat中部署了多个Web应用程序,并在TOMCAT_HOME / lib / ext中共享了服务jar。所有的应用程序都使用Spring,在服务jar中我有bean,用Spring 3.1 Caching注释注释。我正在使用Ehcache提供商。我希望所有Web应用程序都使用一个CacheManager。如果我在Web应用程序级别定义弹簧缓存配置,则缓存可以工作,但是为每个应用程序/上下文创建单独的cacheManager。 '共享'缓存管理器导致问题,因为如果取消部署这些应用程序,则关闭此共享缓存管理器。所以我想要一个在我的服务jar中配置的CacheManager,并用于对来自Web应用程序的bean的方法的所有调用。我目前的尝试是在service.jar的applicationContext.xml中定义以下配置:

<context:annotation-config/>
<context:component-scan base-package="com.mycompany.app" />
<context:component-scan base-package="com.mycompany.portal.service" />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehCacheManager"/>

<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="ehcache.xml" ></bean>

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

我已通过beanRefContext.xml定义了父应用程序上下文:

<bean id="service.parent.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg>
        <list>
            <value>applicationContext.xml</value>
        </list>
    </constructor-arg>
</bean>

我正在使用此上下文作为我的所有Web应用程序的父上下文,并在web应用程序的web.xml中使用以下contextParam:

<context-param>
    <param-name>parentContextKey</param-name>
    <param-value>service.parent.context</param-value>
</context-param>

结果是加载了这个parentContext,但缓存根本不起作用 我怎么解决这个问题?我是否正确地在service.jar中定义了parentContext?

1 个答案:

答案 0 :(得分:0)

我不这么认为。看起来你正试图通过&#34; hacking&#34;为多个应用程序创建一个缓存。根类加载器。

如果您需要跨多个应用程序共享缓存,请使用支持该用例的缓存管理器(即,它为您提供可从每个应用程序访问的服务)。