咖啡因 Springboot 集成

Doc*_*nes 0 java caching spring-boot caffeine

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

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

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

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

@Configuration
public class CacheConfig {

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

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

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

字符串语法是一系列以逗号分隔的键或键值对,每个对应于一个 Caffeine 构建器方法。

initialCapacity=[integer]: sets Caffeine.initialCapacity.
Run Code Online (Sandbox Code Playgroud)

...

recordStats: sets Caffeine.recordStats(). 
Run Code Online (Sandbox Code Playgroud)

持续时间由一个整数表示,后跟“d”、“h”、“m”或“s”之一,分别代表天、小时、分钟或秒。目前没有以毫秒、微秒或纳秒为单位请求过期的语法。

忽略逗号和等号前后的空格。密钥不得重复;在单个值中使用以下键对也是非法的:

maximumSize and maximumWeight
weakValues and softValues 
Run Code Online (Sandbox Code Playgroud)

以及相关的一点:

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

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

谢谢

ste*_*pio 7

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

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

这个 bean 将由 Spring Boot 获取,您将能够@Cacheable("recorded")在您的代码中使用(注意匹配的缓存名称)。

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

这个确切的recordStats()设置功能没有在那里测试,但错误报告和 PR 总是很受欢迎。

PS:相关问题: 动态切换 Caffeine Cache 上的记录统计信息

干杯!