【问题标题】:Spring Data Rest with CacheSpring Data Rest with Cache
【发布时间】:2019-01-06 12:52:05
【问题描述】:

我正在学习 Spring Data Rest,但我没有找到如何在 Spring Data Rest 中使用 Cache。 如何将 CacheSpring Data Rest 的 curd/page 一起使用。 还是应该使用 JPA+Cache 而忽略 Spring Data Rest

如果我有什么误解,请提醒我。

最好的尊重

【问题讨论】:

    标签: spring-data-jpa spring-data-rest


    【解决方案1】:

    您可以尝试以下方法:

    1) 覆盖您的 repos 方法 findByIdfindAll,将它们设为 Cacheable

    public interface MyEntityRepo extends JpaRepository<MyEntity, Long> {
    
        @Cacheable("myEntities")
        @Override
        Optional<MyEntity> findById(Long id);
    
        @Cacheable("pagedMyEntities")
        @Override
        Page<MyEntity> findAll(Pageable pageable);  
    }
    

    2) 创建一个RepositoryEventHandler 来驱逐你的缓存:

    @RepositoryEventHandler 
    public class MyEntityEventHandler {
    
      private final CacheManager cacheManager;
    
      public MyEntityEventHandler(CacheManager cacheManager) {
         this.cacheManager = cacheManager;
      }
    
      @HandleAfterCreate
      @HandleAfterSave
      @HandleAfterDelete
      public void handleCachesEviction(MyEntity entity) {
          Optional.ofNullable(cacheManager.getCache("myEntities"))
              .ifPresent(c -> c.evict(entity.getId()));
    
          Optional.ofNullable(cacheManager.getCache("pagedMyEntities"))
              .ifPresent(c -> c.clear());
      }
    }
    

    3) 当然还要创建一个缓存管理器 bean,例如:

    @EnableCaching
    @SpringBootApplication
    public class Application {
        @Bean
        public CacheManager cacheManager() {
            return new ConcurrentMapCacheManager();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2014-10-06
      • 2021-04-18
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多