我在 Tomcat 中部署了多个 Web 应用程序,并且在 TOMCAT_HOME/lib/ext 中共享了服务 jar。所有应用程序都使用 Spring,在服务 jar 中我有 bean,使用 Spring 3.1 Caching annotations 进行注释。我正在使用 Ehcache 提供程序。我希望所有 Web 应用程序都使用一个 CacheManager。如果我在 Web 应用程序级别定义 spring 缓存配置,缓存会起作用,但会为每个应用程序/上下文创建单独的 cacheManager。“共享”缓存管理器会导致问题,因为如果这些应用程序之一被取消部署,则此共享缓存管理器将关闭。所以我想要一个 CacheManager ,在我的服务 jar 中配置,并用于对来自 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 的方式是否正确?