当前位置: 首页 > 知识库问答 >
问题:

使用Spring缓存为多个web应用程序配置singleton CacheManager

云星波
2023-03-14

我在Tomcat中部署了多个Web应用程序,并在TOMCAT_HOME/lib/exts中共享service jar。所有的应用程序都使用Spring,在服务罐中我有bean,用Spring 3.1缓存注释注释。我使用Ehache提供商。我想有一个单一的CacheManager使用的所有Web应用程序。如果我在Web应用程序级别定义Spring缓存配置,缓存工作,但为每个应用程序/上下文创建单独的cacheManager。共享缓存管理器会导致问题,因为如果这些应用程序中的一个未部署,这个共享缓存管理器就会关闭。所以我想要一个单独的CacheManager,在我的服务罐中配置,用于从Web应用程序对bean进行的所有方法调用。我目前试图在service.jar的应用中定义以下混乱ontext.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中使用以下contextParam。xml:

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

结果是这个parentContext被加载了,但是缓存根本不起作用。我该怎么解决这个问题呢?在服务中定义parentContext是否正确。罐子

共有1个答案

李博达
2023-03-14

我不这么认为。看起来您正试图通过“黑客”根类加载器为多个应用程序创建一个缓存。

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

 类似资料:
  • 我需要在我的服务中使用多个缓存以实现不同的用途。我正在寻找一种方法来分离它们的配置,如maximumSize和expireAfterWrite。我在部署中使用Spring和Kubernetes。yaml我有这个: 我想创建一个新的缓存,cacheC,它将有不同的配置。 我怎么能那样做?谢谢!

  • 这是我的配置属性文件。 应用程序.属性 如果能提供一些非常好的建议来执行它,我将不胜感激。你在这方面的知识对我有帮助,谢谢。

  • 我一直在尝试更改spring-boot redis缓存的默认序列化程序,因为我想从默认实现更改为Jackson2Json实现之一。Jackson2Json库有两个实现,其中之一是:GenericJackson2JsonRedisSerializer,我可以在以下bean实例化中使用它: 当我使用这个序列化器时,序列化工作正常,所有的东西都存储在redis服务器上,但是当o尝试反序列化存储在redi

  • 对于那些在生产中运行Go后端的人: 运行Go web应用程序的堆栈/配置是什么? 除了人们使用标准库NET/HTTP包来保持服务器的运行之外,我还没有看到关于这个主题的很多东西。我读过使用Nginx向Go服务器传递请求-Nginx with Go 这在我看来有点脆弱。例如,如果计算机重新启动(没有附加配置脚本),服务器将不会自动重新启动。 是否有更坚实的生产设置? 关于我的意图--我正在为我的下一

  • 我想知道,在SpringWeb应用程序中,是否有任何方法可以在没有Spring Boot的情况下使用SpringCloudConfig客户端。我想使用带有@Value注释的spring cloud config,我不喜欢在我的web应用程序中使用spring CloudServer rest api。我尝试了开发人员在spring CloudConfig Client中说的没有spring Boo

  • 让spring集成应用程序具有入站http网关和出站http网关,在我想要缓存的两个网关之间,以避免不必要的请求。我唯一的解决方案是在它之后添加带缓存的拦截器和路由器,将cahced结果路由回回复通道,而非缓存的路由回出站,但这个解决方案对我来说似乎很棘手和丑陋。当入站网关具有相同的请求和应答通道时,带缓存的拦截器也可以正常工作(当返回具有相同标头但不同负载的新消息时,它被视为应答),但我不能使用