Caching Spring Data, репозитории / CacheEvict не работает
Я использую Spring Boot, Spring Data, with QueryDSL
, Большинство моих запросов QueryDSL
основан. Я хочу реализовать простой кеш, который хранит User
запросы, и как только один объект updated/saved
тогда весь Cache
очищается
Итак, вот мой интерфейс репозитория:
@Repository
@CacheConfig(cacheNames = "us")
public interface UserRepository extends JpaRepository<User, Long>, QueryDslPredicateExecutor<User> {
@Cacheable
List<User> findAll();
@Override
@Cacheable
List<User> findAll(Sort sort);
@Override
@Cacheable
List<User> findAll(Iterable<Long> longs);
@Override
@CacheEvict(allEntries = true)
<S extends User> List<S> save(Iterable<S> entities);
@Override
@CacheEvict(allEntries = true)
<S extends User> S saveAndFlush(S entity);
@Override
@Cacheable
Page<User> findAll(Pageable pageable);
@Override
@CacheEvict(allEntries = true)
<S extends User> S save(S entity);
@Override
@Cacheable
User findOne(Long aLong);
@Override
@Cacheable
Iterable<User> findAll(Predicate predicate);
@Override
@Cacheable
User findOne(Predicate predicate);
@Override
@Cacheable
Iterable<User> findAll(Predicate predicate, Sort sort);
@Override
@Cacheable
Page<User> findAll(Predicate predicate, Pageable pageable);
}
Как вы можете видеть, я кэшировал все методы "Найти" и использовал методы "Сохранить" для удаления всех записей. Обычно используются следующие:
Page<User> findAll(Predicate predicate, Pageable pageable);
<S extends User> S save(S entity);
Caching
устанавливается исключительно для репозиториев, ничего для Сервисов / Контроллеров и т. д.
Вот мой конфиг:
@Bean
public CacheManager cacheManager() {
GuavaCacheManager manager = new GuavaCacheManager();
CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder()
.removalListener(new RemovalListener<Object, Object>() {
@Override
public void onRemoval(RemovalNotification<Object, Object> notification) {
LOG.info("Cache evicted: " + notification);
}
})
.maximumSize(100);
manager.setCacheBuilder(builder);
return manager;
}
@Bean
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
Я также должен добавить, что User
У сущности есть пара подклассов, но я все запрашиваю с UserRepository
Проблема в том, что, хотя мои поисковые запросы успешно кэшируются, кэш никогда не удаляется, когда я выполняю сохранение.
Что-то я делаю не так?