另一个具有相同名称的CacheManager' cacheManager'已存在于同一个VM中

时间:2016-09-19 16:58:47

标签: spring caching ehcache

使用ehcache和Spring启动tomcat时收到此错误。

Another CacheManager with same name 'cacheManager' already exists in the same VM. Please 
provide unique names for each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same
   CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
  • Spring 3.1
  • ehcache 2.9.0
  • 没有使用此测试的上下文。
  • 这是一个Web JSF应用程序。

ehcache.xml中

         <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="ehcache.xsd"
            updateCheck="true"
            monitoring="autodetect"
            dynamicConfig="true"
            name="ehcacheManager"
            >
        ....

    </ehcache>

缓存context.xml中

        <bean id="cacheManager" 

        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" scope="singleton">
                <property name="shared" value="true"/>
                <property name="configLocation">
                    <value>classpath:ehcache.xml</value>
                </property>
            </bean>

我确实和hibernate-ehcache有旧的依赖关系,遗憾的是我无法删除。这可能是问题吗?

  <dependency>
                   <groupId>org.hibernate</groupId>
                   <artifactId>hibernate-ehcache</artifactId>
                   <version>3.5.0-Final</version>
               </dependency>

有什么建议吗? 谢谢!

3 个答案:

答案 0 :(得分:0)

这里讨论了一些解决方案here

您可能需要提供ehcache.xml或设置缓存名称,否则您可以看到here

编辑:ApplicationContext加载两次

如果你点击了断点,那就去堆栈跟踪,你可能会发现为什么spring加载了两次上下文。

答案 1 :(得分:0)

有两种可能性。

  1. 在semesever上安装了具有相同catch名称的其他应用程序
  2. 由于ContextLoaderListener,启动服务器时应用程序可能会部署两次。因此,从web.xml中删除ContextLoaderListener。

答案 2 :(得分:0)

以下将解决问题:

hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

hibernate.cache.provider_class = net.sf.ehcache.hibernate.SingletonEhCacheProvider