Caching spring-ehcache不工作

Caching spring-ehcache不工作,caching,ehcache,Caching,Ehcache,我试图实现ehcache以获取应用程序启动期间加载的静态数据(来自表),但是当我再次调用数据库时,调用将转到数据库(可以看到在控制台上运行sql),而不是从ehcache获取值 我的代码是: ehcache.xml如下: <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLoc

我试图实现ehcache以获取应用程序启动期间加载的静态数据(来自表),但是当我再次调用数据库时,调用将转到数据库(可以看到在控制台上运行sql),而不是从ehcache获取值

我的代码是:

ehcache.xml
如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd"
    updateCheck="true"
    monitoring="autodetect"
    dynamicConfig="true">

    <diskStore path="java.io.tmpdir" />

    <cache name="ObjectList"
        maxEntriesLocalHeap="10000"
        maxEntriesLocalDisk="1000"
        eternal="false"
        diskSpoolBufferSizeMB="20"
        timeToIdleSeconds="2000000" timeToLiveSeconds="900000000000"
        memoryStoreEvictionPolicy="LFU"
        transactionalMode="off">
        <persistence strategy="localTempSwap" />
    </cache>
</ehcache>
我正在使用以下方法测试我的计算机:

public class testCache {
  doSomething() { 
    List<Object> listObject = repo.findAll();
    listObject.size();
  }

  public void getOne() { 
    Object o = repo.findById(1L);
  }
}
公共类testCache{
doSomething(){
List listObject=repo.findAll();
size();
}
public void getOne(){
对象o=回购findById(1L);
}
}
我可以在getAll方法中看到db hit,但是我认为结果会存储在缓存中,在第二次调用中不会有db hit by method getById,但是我在第二次调用中也看到db hit


任何人都可以建议我是否遗漏了任何内容。

当您缓存
findAll
的结果时,它会在缓存中创建一个条目,将Spring缓存生成的键映射到
列表,因为您的方法没有参数。它不会将
id
对象之间的每个列表元素的一个映射放入缓存中

因此,当您使用
findById(Long)
时,Spring缓存将查找映射到
id
的缓存项。由于找不到,它将访问数据库


没有办法让Spring缓存为每个集合元素放置一个映射。如果这是您真正需要的,那么您必须对其进行编码,而不是依赖于
@Cacheable
注释。

当您缓存
findAll
的结果时,它会在缓存中创建一个条目,该条目将Spring缓存生成的键映射到
列表,因为您的方法没有参数。它不会将
id
对象之间的每个列表元素的一个映射放入缓存中

因此,当您使用
findById(Long)
时,Spring缓存将查找映射到
id
的缓存项。由于找不到,它将访问数据库

没有办法让Spring缓存为每个集合元素放置一个映射。如果这是您真正需要的,那么您必须对其进行编码,而不是依赖于
@Cacheable
注释

@Configuration
@EnableCaching
@ComponentScan("com.abcl.process")
public class EhCacheConfiguration {

  @Bean("abclCacheManager")
  public CacheManager cacheManager() {
    return new EhCacheCacheManager(ehCacheCacheManager().getObject());
  }

  @Bean
  public EhCacheManagerFactoryBean ehCacheCacheManager() {
    EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
    cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
    cmfb.setShared(true);
    cmfb.setCacheManagerName("abclCacheManager");

    return cmfb;
  }

}
public class testCache {
  doSomething() { 
    List<Object> listObject = repo.findAll();
    listObject.size();
  }

  public void getOne() { 
    Object o = repo.findById(1L);
  }
}