带缓存的Spring Data Rest

时间:2018-07-30 09:41:58

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

我正在学习 Spring Data Rest ,但是我没有找到如何在Spring Data Rest中使用 Cache 。 如何将缓存 Spring Data Rest的凝乳/页面结合使用。 还是应该使用 JPA + Cache 并忽略 Spring Data Rest

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

最诚挚的问候

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

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();
    }
}