同一台VM(ehCache 2.5)中已经存在另一个未命名的CacheManager


76

这是我运行junit测试时发生的情况...

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.

The source of the existing CacheManager is: 
 DefaultConfigurationSource [ ehcache.xml or ehcache-failsafe.xml ]

异常背后的原因是什么?是否可以同时运行1个以上的cacheManager?

这就是我使用Sping 3.1.1配置cachManager的方式。它将cacheManager的范围明确设置为“单例”

<ehcache:annotation-driven />

<bean
    id="cacheManager"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
    scope="singleton"
    />

ehcache.xml看起来像

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
     updateCheck="false"
     maxBytesLocalHeap="100M" 
     name="cacheManager"
     >
 ....
 </ehcache>

最后我的课

@Component
public class BookingCache implements CacheWrapper<String, BookingUIBean> {

     @Autowired
     private CacheManager ehCacheManager;
      ....
}

我非常确定我在代码库中只处理一个cacheManager。其他一些可能正在运行第n个实例。


4
我在ehCache 2.5或更高版本中看到了相同的问题。使用2.4.7不会导致此问题,但是最好知道如何使junit与2.5友好。
aweigold 2012年

1
谢谢。我切换回2.4.7,现在可以了。还有一个博客条目,讨论可能的解决方法(虽然它们都不似乎是非常有吸引力的)norrisshelton.wordpress.com/2012/03/08/...
思谋

诺里斯谢尔顿的解决方案对我的作品(norrisshelton.wordpress.com/2012/03/08/...
jbbarquero

该解决方案似乎不适用于我,不过我正在使用testNG。我仍然收到“同一VM中已经存在另一个具有相同名称'myCacheManager'的CacheManager” :(
nodje 2012年

我相信[这里] [1]也可以解决问题。[1]:stackoverflow.com/questions/11139653/...
Lekkie

Answers:


46

您的EhCacheManagerFactoryBean可能是一个单例,但它正在构建多个CacheManager并尝试为其赋予相同的名称。这违反了Ehcache 2.5语义

2.5版之前的Ehcache版本允许JVM中存在任意数量的具有相同名称(相同配置资源)的CacheManager。

Ehcache 2.5及更高版本不允许同一JVM中存在多个具有相同名称的CacheManager。创建非Singleton CacheManager的CacheManager()构造函数可能违反此规则

通过将shared属性设置为true,告诉工厂bean在JVM中创建CacheManager的共享实例。

<bean id="cacheManager"
      class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
      p:shared="true"/>

5
需要注意的一件事是,如果Spring正在自动代理EhCacheManagerFatoryBean,即使将p:shared设置为true,您仍然可能会收到错误消息。解决此问题的方法是不使用文件的默认名称,而不是使用ehcache.xml重命名文件,并使用新文件名将p:config-location添加到EhCacheManagerFactoryBean声明中。
TechTrip

1
@TechTrip:我已经做到了:我已经安装了p:config-location="classpath:ehcache-foo.xml" p:shared="true"EhCacheManagerFactoryBean,但是却发生冲突,因为JVM上的两个WAR使用了相同的模块。
mcv

3
如果我错了,请纠正我,但这是否意味着第二个测试将重用第一个测试中的缓存,并且其中仍有任何缓存的数据?这可能导致难以调试的行为,因为第二项测试未在众所周知的状态下开始。然后,测试结果可能取决于测试顺序。(当然,黑匣子测试不应该取决于是否使用缓存,但是完全取决于缓存状态进行性能测试,或者您可能正在测试自己的使用ehcache的缓存实用程序是完全有效的。)
Henno Vermeulen 2015年

41

使用JPA(2.0)+ Hibernate(3.6.4)+ Spring(3.2.4)进行集成测试时,我遇到了相同的问题。使用以下Hibernate配置已解决了该问题:

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

而不是使用

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory"/>

3
我修改了此解决方案来解决我的Spring Boot测试问题:我将org.hibernate.cache.ehcache.EhCacheRegionFactory代替了Hibernate 4的net.sf.ehcache.hibernate.EhCacheRegionFactory。使用Spring Boot可以在application.properties中进行设置:spring.jpa.properties.hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory或使用@TestPropertySource来将配置限制为测试。
Michael Koch

1
哇,从休眠模式4.3.x升级到5.2,节省了我的时间。
smallufo

22

您的问题是在Spring测试框架中构建的上下文加载优化。一旦完成测试类,Spring(默认情况下)不会破坏上下文,希望另一个测试类可以重用它(而不是从头开始创建它)。

您可以使用@DirtiesContext覆盖此默认设置,或者,如果使用maven,则可以将surefire forkMode设置为“ always”,并为每个测试类创建一个新的VM。


3
这可以在不更改实际运行时配置的情况下为测试环境彻底解决该问题。真好!
丢失

2
forkmode = always总是很好,但是已过时。见:maven.apache.org/surefire/maven-surefire-plugin/examples/... TRY forkCount = 1(默认值),reuseForks =假
theINtoy

12

您也可以尝试在ehcache.xml配置(在ehcache元素上)上设置名称“ xxx”。

这对我来说是成功的秘诀,因为我认为我的应用程序模块之一中还隐藏着另一种缓存配置。

共享解决方案也可以,但是我不知道它的广泛含义。


是! 事实证明,这是我唯一的解决方案。将name属性添加到顶部echache元素。这似乎并没有在本例中ehcache.xml中的文件被记录在案..
萨科酒店距离Mommaerts

太伤心了,我在这里只读了第一个答案,之后我回过头来在eclipse中阅读了所有spring和ehcache初始化源,以弄清楚是否需要name属性,否则将忽略配置文件...
jpprade 2013年

好的解决方案,我在两个不同的模块中进行了两次单元测试,但都碰巧使用了ehcache,但都解决了这个问题
Henno Vermeulen

优秀。但是我仍然不明白如何通过将名称放入ehcache.xml来解决该问题?我正在使用Spring缓存+休眠二级缓存。两者都使用相同的ehcache.xml。
santu 2014年

1
该解决方案仅适用于冲突的配置(几个ehcache.xml文件),如果仅使用一个,则可能是另一个问题。
Michael Holst

12

升级到Hibernate 5之后,我不得不使用:

<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/>

代替:

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

请注意,这些套件彼此不同。



2

如果仅测试业务服务而不是二级缓存,则可以在spring config文件中删除二级配置,您的测试将成功运行。有我的二级配置:

 <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="defaultPU" />
        <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">false</prop>
                <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
                <prop key="hibernate.cache.use_second_level_cache">false</prop>
                <prop key="hibernate.cache.use_query_cache">false</prop>
            </props>
        </property>
    </bean>

如果我更改为二级缓存配置的完整配置,则真正的webapp会在运行时使用,如下所示:

    <bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="persistenceUnitName" value="defaultPU" />
            <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
            <property name="jpaProperties">
                <props>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    <prop key="hibernate.show_sql">false</prop>
                    <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
                    <prop key="hibernate.cache.use_second_level_cache">true</prop>
                    <prop key="hibernate.cache.use_query_cache">true</prop>
                    <prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>               
                    <prop key="net.sf.ehcache.configurationResourceName">ehcache/ehcache-hibernate-local.xml</prop>
                </props>
            </property>
        </bean>

然后我得到相同的异常“同一虚拟机中已经存在另一个未命名的CacheManager”


2

就我而言,我们有一个定义为bean的自定义缓存管理器。也是一个自定义应用程序上下文,因此我们不使用spring junit运行器...因此@DirtiesContext不起作用。

诀窍是从Bean检索缓存实例,在该缓存上获取cacheManager(来自EHCache的实例)。然后在该cachemanager上调用removeCache方法。

将其放在用@After注释的方法中,并在每次测试后从VM中删除您的缓存。像这样:

@After
public void destroy() {
    MyCustomCacheManager customCacheManager = (MyCustomCacheManager) context.getBean("yourCustomCacheManagerBean");

    try {
        net.sf.ehcache.Cache cache = customCacheManager.getCache();
        net.sf.ehcache.CacheManager cacheManager = cache.getCacheManager();
        cacheManager.removeCache("nameOfYourCache");
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

    context.destroy();
    context = null;
}

2

我通过将以下内容添加到resources.groovy中来解决了这个问题:

beans = {... aclCacheManager(EhCacheManagerFactoryBean){shared = true} ...}


2

切换到Spring Boot 2.0.2时发生在我身上。通过执行以下操作解决了该问题:

在application.yml中删除

spring.jpa.properties.hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

在pom.xml中删除

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

仅在pom.xml中保持

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-ehcache</artifactId>
</dependency>

2

设置EhCacheManagerFactoryBean#sharedtrue为我工作。

设置EhCacheManagerFactoryBean#acceptExistingtrueDIDN对我不起作用。

import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

@Configuration
public class EhCacheConfiguration {

    @Bean
    public EhCacheCacheManager ehCacheCacheManager() {

        return new EhCacheCacheManager(ehCacheManagerFactoryBean().getObject());
    }


    @Bean
    public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {

        EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();

        cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
        cacheManagerFactoryBean.setShared(true);

        return cacheManagerFactoryBean;
    }
}

在Spring 4中不使用XML的情况下使用EhCache所述


1

对于以后的读者而言,在我的情况下,此问题的原因是,在我的pom.xml文件中,我导入了hibernate-ehcache库,我不知道该库也已包含ehcache库,然后显式导入了net.sf.ehache libray。

当我以独立应用程序(例如,命令行实用程序)运行时,这似乎工作正常,但在tomcat服务器上运行时,它在原始帖子中引起了错误。

从以下位置更改我的pom文件:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.7.4</version>
        </dependency>

至:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <!-- ehcache dependency removed -->

解决了问题。如果有人知道为什么问题仅在tomcat容器中运行时才会出现,我很想知道。


0

在glassfish 3.0.1中,我将问题追溯到IniShiroFilter进行了两次初始化,这是在服务器启动后立即触发并发请求时发生的。以下是来自与两个HTTP requet对应的两个不同线程的堆栈跟踪:

[#|2012-11-28T08:25:10.630-0800|SEVERE|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=28;_ThreadName=Thread-1;|java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1249)
        at org.apache.shiro.web.servlet.IniShiroFilter.<init>(IniShiroFilter.java:124)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:303)
        at com.sun.enterprise.web.WebContainer.createFilterInstance(WebContainer.java:725)
        at com.sun.enterprise.web.WebModule.createFilterInstance(WebModule.java:1948)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:248)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.sentilla.filter.DumpFilter.doFilter(DumpFilter.java:152)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:322)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:239)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:662)

另一个线程

[#|2012-11-28T08:25:15.299-0800|SEVERE|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=29;_ThreadName=Thread-1;|java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1249)
        at org.apache.shiro.web.servlet.IniShiroFilter.<init>(IniShiroFilter.java:124)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:303)
        at com.sun.enterprise.web.WebContainer.createFilterInstance(WebContainer.java:725)
        at com.sun.enterprise.web.WebModule.createFilterInstance(WebModule.java:1948)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:248)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.sentilla.filter.DumpFilter.doFilter(DumpFilter.java:152)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:322)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:239)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:662)

查看堆栈跟踪ApplicationFilterConfig.java:248可能是罪魁祸首。或者,glassfish在错误的上下文中初始化过滤器,为了进行比较,Tomcat在BootStrap期间初始化了过滤器。


0

就我而言,问题是组件扫描和Java配置。

root-context.xml
<context:component-scan base-package="org.beansugar">

servlet-context.xml
<context:component-scan base-package="org.beansugar">

Spring组件扫描工作在xml文件上两次。它在每次运行时在SpringConfig.java中生成bean。然后创建重复的缓存管理器。

因此,我将其更改如下。

root-context.xml
<context:component-scan base-package="org.beansugar">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

servlet-context.xml
<context:component-scan base-package="org.beansugar" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

0

错误的映射文件也会发生此错误。该消息太可怕了,没有说出原因。


0

在我的情况下,配置如下:

<spring.boot.version>1.5.8.RELEASE</spring.boot.version>
<spring.boot.yarn.version>2.4.0.RELEASE</spring.boot.yarn.version>
<spring.version>4.3.7.RELEASE</spring.version>

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

更改EHCache提供程序类为我做了工作。我使用的是缓存提供程序类,org.hibernate.cache.EhCacheProvider而不是将其更改为: net.sf.ehcache.hibernate.SingletonEhCacheProvider


0

Spring Boot 2.1.2开始,以下配置可以解决该问题。(请注意,这些是整体配置的摘要。)

依存关系:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.2.8.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-ehcache</artifactId>
  <version>5.2.8.Final</version>
</dependency>

application.yml配置:

spring:
  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: none
    show-sql: true
    properties:
      dialect: org.hibernate.dialect.MySQLDialect
      net:
        sf:
          ehcache:
            configurationResourceName: ehcache.xml
      hibernate:
        cache:
          use_second_level_cache: true
          region:
            factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory

ehcache.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
  <!-- Required elements -->
  <diskStore path="java.io.tmpdir"/>
  <defaultCache
    maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="120"
    timeToLiveSeconds="120"
    overflowToDisk="true"/>

  <!-- Cache settings per class -->
  <cache name="com.mystuff.component.services.example.Book"
    maxElementsInMemory="1000"
    eternal="false"
    timeToIdleSeconds="300"
    timeToLiveSeconds="600"
    overflowToDisk="true"/>
</ehcache>

我正在处理的应用程序在没有可用缓存的情况下急剧降低了速度。因此,为了验证,我只运行了应用程序并命中了读取的激烈端点之一。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.