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

Проблема в том, что, хотя мои поисковые запросы успешно кэшируются, кэш никогда не удаляется, когда я выполняю сохранение.

Что-то я делаю не так?

0 ответов

Другие вопросы по тегам