我们正在使用咖啡因来替换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()
设置功能未在此处进行测试,但始终欢迎提供错误报告和PR。附:相关问题:
Dynamically toggling recording stats on Caffeine Cache
干杯!