timetoliveseconds ehcache весенний загрузочный конфиг не работает - PullRequest
0 голосов
/ 29 августа 2018

Ниже находится мой файл конфигурации ehcache

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd"
    updateCheck="true"
    monitoring="autodetect"
    dynamicConfig="true">

    <diskStore path="java.io.tmpdir" />



    <cache name="trans"
        maxEntriesLocalHeap="10000"
        maxEntriesLocalDisk="1000"
        eternal="false"
        diskSpoolBufferSizeMB="20"
        timeToIdleSeconds="0"
        timeToLiveSeconds="6"
        memoryStoreEvictionPolicy="LFU"
        transactionalMode="off">
        <persistence strategy="localTempSwap" />
    </cache>    
</ehcache>

Все аннотации и конфигурации Spring работают правильно

@Component
@CacheConfig(cacheNames = {"trans" })
public class MyTransService {

    private List<Trans> list;

    @Autowired
    private EhCacheCacheManager manage;

    @PostConstruct
    public void setup() {
        list = new ArrayList<>();
    }

    @CachePut
    public void addTransaction(Trans trans) {
        this.list.add(trans);
    }

    @CacheEvict(allEntries = true)
    public void deleteAll() {
        this.list.clear();
    }    
}

Но кэш не очищается через timetoliveseconds .

Может кто-нибудь помочь мне, что не так в моей конфигурации.

Ниже на странице написано, что это ошибка, но не знаете, как это исправить?
Я использую версию spring-boot-starter-cache-2.0.3

https://github.com/ehcache/ehcache-jcache/issues/26

есть некоторые похожие вопросы, но не предусмотрено никаких решений

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

удалось решить эту проблему с помощью оболочки ehcache-JSR-107. Ниже приведен конфиг java

@Component
public class CachingSetup implements JCacheManagerCustomizer {

     @Override
     public void customize(CacheManager cacheManager)
     {
       cacheManager.createCache("trans", new MutableConfiguration<>()
         .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(SECONDS, 10)))
         .setStoreByValue(false)
         .setStatisticsEnabled(true));
     }
}

Pom

<dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-cache</artifactId> <!--Starter for using Spring Framework's caching support-->
        </dependency>           
        <dependency>
          <groupId>javax.cache</groupId> <!-- JSR-107 API-->
          <artifactId>cache-api</artifactId>
        </dependency>
        <dependency>
          <groupId>org.ehcache</groupId>
          <artifactId>ehcache</artifactId>
          <version>3.0.0</version>
        </dependency>
    </dependencies>
0 голосов
/ 31 августа 2018

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

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

...