Caffeine Springboot集成

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

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

我试图在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方法。这些必须在代码中配置。

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

谢谢

aaa925168 回答:Caffeine Springboot集成

您可以手动定义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。

P.S .:相关问题: Dynamically toggling recording stats on Caffeine Cache

干杯!

,

我设法使其工作。这是代码:

@Configuration
public class CacheConfig {

  @Bean
  public CacheManager cacheManager() {
    CaffeineCacheManager cacheManager = new CaffeineCacheManager("cache1","cache2","cache3");
    cacheManager.setCacheSpecification("recordStats");
    return cacheManager;
  }
}

还有一个缺点,那就是缓存名称必须与@Cacheable(cachenames={"..."})批注中的名称匹配

本文链接:https://www.f2er.com/2686629.html

大家都在问