当前位置: 首页 > 知识库问答 >
问题:

timetoliveseconds ehcache spring启动配置不工作

轩辕鸿祯
2023-03-14

下面是我的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之后无法清除。

谁能帮我一下我的配置有什么问题吗。

下面的页面说它是错误,但不知道如何解决这个问题?
我正在使用sping-boot-starter-cache-2.0.3版本

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

有一些类似的问题,但没有提供任何解决方案

共有2个答案

姜智渊
2023-03-14

如果您期望缓存内容在没有交互的情况下消失,那确实是不可能的。Ehache没有过期项目的背景检查来急切地删除它们。

相反,当您试图访问过期的项目时,或者在写入缓存期间,由于缓存已满,逐出操作会以内联方式进行。

澹台景山
2023-03-14

我们能够用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));
     }
}

聚甲醛

<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>
 类似资料:
  • 我正在使用最新的spring boot版本,我正在尝试设置一个应用程序,但我想禁用数据源配置。我的配置类如下所示: 但当我运行应用程序时,我会得到以下堆栈跟踪: 我的配置中是否缺少任何东西来完全禁用数据源配置?我将手动设置数据源,所以我不希望Spring为我处理这个问题。

  • 配置方式 Sentinel 提供如下的配置方式: JVM -D 参数方式 properties 文件方式(1.7.0 版本开始支持) 其中,project.name 参数只能通过 JVM -D 参数方式配置(since 1.8.0 取消该限制),其它参数支持所有的配置方式。 优先级顺序:JVM -D 参数的优先级最高。若 properties 和 JVM 参数中有相同项的配置,以 JVM 参数配置

  • 我最近开始使用,发现它非常有趣。由于我的大多数应用程序都在中,我决定使用团队提供的spring boot starter项目进行快速设置。它附带了autoconf-spring设置,这使得查询endpoint更加容易。 在IDEA中花了几个小时进行项目设置后,我能够运行graphql示例应用程序。但我认为我的servlet仍然没有启用,只有endpoint正在运行,因为默认查询返回。 这是: 这就

  • 当我通过JWS调用一个。jar时,我试图让启动屏幕工作。下面是jnlp文件的详细信息。其他功能正在按预期工作。我已经将pic.gif文件放在Apache tomact的根文件夹中 JaNeLA报告-版本11.05.17 http://localhost:8080/WithoutManifest.jnlp的报表 1.XML编码未知,但声明为UTF-8 通过添加标志优化此应用程序以供脱机使用。 可以通

  • 我正在WAMP 2.5和Apache 2.4.9中设置SSL证书。由于我在http.conf中包含了conf/extra/httpd-ssl.conf注释,Wamp无法启动。下面是我的ssl confg文件和httpd.conf,请大家看一下,有帮助。 SSL Conf FileHttpd.conf文件

  • 9.a. 作出您的选择 简介 至此, 您的内核配置编译完毕, 所需的系统配置文件业已填写妥当. 现在要做的是安装一个在您开机时能启动您的内核的程序. 这一程序名为 启动器 (bootloader). 在 x86 体系中, Gentoo 提供了 GRUB 和 LILO 以供选择. 在装上它们两者之一前, 我们想先让您了解如何配置帧缓冲 (当然, 在您想要它的前提下). 帧缓冲让您在 Linux 命令