我们正在使用咖啡因来替换ConcurrentHashMap缓存,该缓存在当前springboot中是默认设置。我们正在使用@Cacheable(cacheNames = { "..." })批注动态创建缓存。

我试图设置recordStats属性,因为我们正在使用springboot执行器软件包来监视应用程序的各个方面。

我试图在spring.cache.caffeine.spec=expireAfterAccess=3600s,recordStats中设置application.properties,这不起作用。

@Configure类中设置它也不起作用:

@Configuration
public class CacheConfig {

  @Bean
  public CacheManager cacheManager() {
    CaffeineCacheManager cacheManager = new CaffeineCacheManager();
    cacheManager.setCacheSpecification("expireAfterAccess=3600s,recordStats");
    return cacheManager;
  }
}


缓存统计信息不会出现在/actuator/cache/{caches}端点或我们的springboot-admin服务器中。

从当前的api文档中,我发现:


  字符串语法是一系列逗号分隔的键或键/值对,每个键或键/值对均对应于Caffeine builder方法。

initialCapacity=[integer]: sets Caffeine.initialCapacity.

  
  ...

recordStats: sets Caffeine.recordStats().

  
  持续时间用整数表示,后跟“ d”,“ h”,“ m”或“ s”之一,分别表示天,小时,分钟或秒。当前没有语法要求以毫秒,微秒或纳秒为单位的到期时间。
  
  逗号和等号前后的空格将被忽略。键不能重复;在单个值中使用以下密钥对也是非法的:

maximumSize and maximumWeight
weakValues and softValues



和有关点:


  CaffeineSpec不支持使用非值参数配置Caffeine方法。这些必须在代码中配置。


有没有可能完成我的任务?

谢谢

最佳答案

您可以定义要手动缓存的bean,例如

@Bean
public Cache recorded() {
    return new CaffeineCache("recorded", Caffeine.newBuilder()
            .recordStats()
            .build());
}


Spring Boot将拾取该bean,您将可以在代码中使用@Cacheable("recorded")(注意匹配的缓存名称)。

同样,我为Caffeine和Spring Boot设计的宠物项目也可能对您有用:
https://github.com/stepio/coffee-boots

确切的recordStats()设置功能未在此处进行测试,但始终欢迎提供错误报告和P​​R。

附:相关问题:
Dynamically toggling recording stats on Caffeine Cache

干杯!

10-05 19:35