timetoliveseconds Ehcache spring boot config не работает


Ниже приведен мой конфигурационный файл 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>

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

@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 version

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

Есть несколько похожих вопросов, но не дающих никаких решений

2 2

2 ответа:

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

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

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

@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));
     }
}

ПОМ

<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>