首页 > 解决方案 > Spring Data Rest with Cache

问题描述

我正在学习Spring Data Rest,但我没有找到如何在 Spring Data Rest 中使用Cache。如何将缓存Spring Data Rest 的 curd/page一起使用。或者我应该使用JPA+Cache并忽略Spring Data Rest

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

最良好的问候

标签: spring-data-jpaspring-data-rest

解决方案


您可以尝试以下方法:

1)覆盖您的回购方法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();
    }
}

推荐阅读