2015-01-15 2 views
12

Я реализовал кеш, но у меня нет времени истечения срока действия. Кто-нибудь знает, как я могу установить время истечения весенней загрузки с помощью @cacheable.Время истечения времени загрузки @cacheable spring

Это мое предложение:

@Cacheable (значение = "прогноз", если = "# результат == NULL")

Спасибо вам.

ответ

1

Обратите внимание, что в этом ответе используется ehcache, который является одним из поддерживаемых менеджеров кэша Spring Boot Spring и, возможно, одним из самых популярных.

Сначала нужно добавить в pom.xml:

<!-- Spring Framework Caching Support --> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-cache</artifactId> 
</dependency> 
<dependency> 
    <groupId>net.sf.ehcache</groupId> 
    <artifactId>ehcache</artifactId> 
</dependency> 

В src/main/resources/ehcache.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 
    <defaultCache eternal="true" maxElementsInMemory="100" overflowToDisk="false" /> 
    <cache name="forecast" 
      maxElementsInMemory="1000" 
      timeToIdleSeconds="120" 
      timeToLiveSeconds="120" 
      overflowToDisk="false" 
      memoryStoreEvictionPolicy="LRU" /> 
</ehcache> 
+0

Spring ботинке не имеет * XML – nole

+3

Ах да, есть! :) Это местоположение по умолчанию для конфигурации EHCache. Другие библиотеки кэширования предположительно ожидают разные местоположения. – Steve

6

От reference documentation

непосредственно через поставщика кэша. Абстракция кэша ... ну, абстракция не является реализацией кэша. Решение, которое вы используете, может поддерживать различные политики данных и различные топологии, которые другие решения не выполняют (например, JDK ConcurrentHashMap) - выявление того, что в абстракции кеша было бы бесполезно просто потому, что поддержка поддержки не поддерживалась. Такая функциональность должна контролироваться непосредственно через кеш-память, при ее настройке или через собственный API.

+0

Спасибо. Наконец, я добавил это в свой application.yml: spring.resources.cache-period – nole

+1

К сожалению, я не вижу ссылку с вашим примером. Похоже, я совершенно не связан со мной. Это свойство предназначено для настройки периода кэширования веб-ресурсов. –

1

Вы не можете указать время истечения срока действия с помощью обозначения @cacheable, поскольку @cacheable не предоставляет такой настраиваемой опции.

Однако различные поставщики кеширования, обеспечивающие пружинное кэширование, предоставили эту функцию через свои собственные конфигурации. Например, NCache/TayzGrid позволяет вам create different cache regions with configurable expiration time.

Если вы внедрили свой собственный кеш, вам нужно будет определить способ определения срока действия в вашем провайдере кеша, а также потребуется включить логику истечения в ваше решение.

6

Я использую жизнь взлома, как этот

@Configuration 
    @EnableCaching 
    @EnableScheduling 
    public class CachingConfig { 
     public static final String GAMES = "GAMES"; 
     @Bean 
     public CacheManager cacheManager() { 
      ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager(GAMES); 

      return cacheManager; 
     } 

     @CacheEvict(allEntries = true, value = {GAMES}) 
     @Scheduled(fixedDelay = 10 * 60 * 1000 , initialDelay = 500) 
     public void reportCacheEvict() { 
      System.out.println("Flush Cache " + dateFormat.format(new Date())); 
     } 
    } 
Смежные вопросы