Привет У меня проблема с чистым кешем при выполнении метода. Вот мои настройки и кэширует методы:Spring Cache Evict не работает
@Configuration
@EnableCaching
@AutoConfigureAfter(value = {MetricsConfiguration.class, DatabaseConfiguration.class})
@Profile("!" + Constants.SPRING_PROFILE_FAST)
public class CacheConfiguration {
private final Logger log = LoggerFactory.getLogger(CacheConfiguration.class);
public static final String STOCK_DETAILS_BY_TICKER_CACHE = "stockDetailsByTickerCache";
public static final String RSS_NEWS_BY_TYPE_CACHE = "rssNewsByTypeCache";
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<Cache> caches = new ArrayList<Cache>();
caches.add(new ConcurrentMapCache(STOCK_DETAILS_BY_TICKER_CACHE));
caches.add(new ConcurrentMapCache(RSS_NEWS_BY_TYPE_CACHE));
cacheManager.setCaches(caches);
return cacheManager;
}
}
Этот метод я хочу кэшировать:
@Cacheable(cacheNames = CacheConfiguration.RSS_NEWS_BY_TYPE_CACHE, key = "#type")
public ResponseEntity<List<NewsDetailsDTO>> getLatestNewsMessageByType(RssType type) {
Pageable pageable = new PageRequest(0, 5, Sort.Direction.DESC, "createdDate");
List<NewsMessage> latestNewsMessage = newsMessageRepository.findByType(type, pageable).getContent();
return new ResponseEntity<List<NewsDetailsDTO>>(mapToDTO(latestNewsMessage), HttpStatus.OK);
}
Об исполнении этого метода я хотел бы очистить кэш по типу:
@CacheEvict(cacheNames={CacheConfiguration.RSS_NEWS_BY_TYPE_CACHE}, beforeInvocation = true, key = "#news.type")
public void save(NewsMessage news) {
newsMessageRepository.save(news);
}
И объект NewsMessage выглядит так:
@Entity
@Table(name = "NEWS_MESSAGE")
public class NewsMessage extends ChatMessage {
<other fileds>
@NotNull
@Enumerated(EnumType.STRING)
private RssType type;
}
Работа с кешем работает нормально, в первый раз, когда запрос к БД выполняется вторым, а затем данные извлекаются из кеша. Проблема в том, что когда я обновляю данные, @CacheEvict не очищает кеш. Я пытался очистить весь кеш, используя эту аннотацию: @CacheEvict (cacheNames = {CacheConfiguration.RSS_NEWS_BY_TYPE_CACHE}, allEntries = true) Но это также не работает. Не могли бы вы помочь мне?
Я имел следующий поглотитель: \t общественного RssType GetType() { \t \t тип возвращаемого значения; \t} Поэтому он должен работать нормально. Но обратите внимание, что cacheEvict с allEntires = true также не работает. – Pulkownik