首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring JPA中实现缓存

如何在Spring JPA中实现缓存
EN

Stack Overflow用户
提问于 2017-11-06 01:47:35
回答 2查看 2.3K关注 0票数 1

我想使用Ehcache和java配置(而不是通过xml)在spring jpa存储库中实现缓存功能。但是我对@cache,@caceevict,@cacheable,@caching注解感到困惑。

1)我想从缓存中有数据,如果数据在缓存中不可用,那么它应该从数据库中提取。

2)在控制器中,如果我点击/api/cacheRefresh,它应该刷新所有的表。

EN

回答 2

Stack Overflow用户

发布于 2017-11-06 19:01:41

在一个典型的应用程序中,你会有这样的层:

可以访问您的“存储”(例如db、nosql等)的

  • repositories,,以及来自外部服务的数据(例如通过rest calls
  • services,)(可能包含业务逻辑,也可能不包含业务逻辑),并使用存储库收集应用该业务逻辑

所需的所有数据。

您通常不会将缓存放在存储库层上,而是应该在服务层上完成。因此,为了回答您的问题,您应该让JPA存储库尽可能干净,并在访问存储库的服务上放置@Cacheable/@CacheEvict注释,例如:

代码语言:javascript
运行
复制
public class MyService {

    private final MyRepository repository;

    public MyService(MyRepository repository) {
        this.repository = repository;
    }

    @Cacheable
    public MyItem findOne(Long id) {
        return repository.findOne(id);
    }

    @Cacheable
    public List<MyItem> findAll() {
        return repository.findAll();
    }

    @CacheEvict
    public void evict() {

    }

}

最终,当您需要刷新缓存时,可以从控制器调用MyService类的evict方法,并且在调用findOne/findAll方法时仍然可以从缓存中获益。

票数 1
EN

Stack Overflow用户

发布于 2017-11-07 04:28:19

除了Fabio所说的,您还可以在ehcache.xml中配置缓存限制(将其放在类路径中)。

代码语言:javascript
运行
复制
<cache name="gendersCache" 
      maxEntriesLocalHeap="400"
      maxEntriesLocalDisk="600" 
      eternal="false" 
      diskSpoolBufferSizeMB="20" 
      timeToIdleSeconds="1800" 
      timeToLiveSeconds="3600" 
      memoryStoreEvictionPolicy="LFU" 
      transactionalMode="off">
      <persistence strategy="localTempSwap"/>
    </cache>

对于Springboot,在application.properties中添加以下行

代码语言:javascript
运行
复制
 spring.cache.ehcache.config=classpath:ehcache.xml

对于常规的spring应用程序,在下面添加您的applicationContext.xml文件

代码语言:javascript
运行
复制
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="/WEB-INF/ehcache.xml" p:shared="true"/> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47124653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档