timetoliveseconds ehcache spring 启动配置不工作
timetoliveseconds ehcache spring boot config is not working
下面是我的 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
有一些类似的问题,但没有提供任何解决方案
如果您期望缓存内容在没有交互的情况下消失,那确实不会发生。 Ehcache 没有对过期项目进行后台检查,会急切地删除它们。
相反,过期项目的删除是内联的,无论何时您尝试访问它们,或者如果在写入缓存期间,由于缓存已满而开始逐出。
能够使用 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>
下面是我的 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
有一些类似的问题,但没有提供任何解决方案
如果您期望缓存内容在没有交互的情况下消失,那确实不会发生。 Ehcache 没有对过期项目进行后台检查,会急切地删除它们。
相反,过期项目的删除是内联的,无论何时您尝试访问它们,或者如果在写入缓存期间,由于缓存已满而开始逐出。
能够使用 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>