我们正在使用咖啡因来替换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文档中,我发现:
字符串语法是一系列逗号分隔的键或键值对,每个键对应于咖啡因生成器方法。
initialCapacity=integer:设置Caffeine.initialCapacity。
..。
recordStats:设置Caffeine.recordStats()。
工期由整数表示,后面跟着"d“、"h”、"m“或"s",分别表示天、小时、分钟或秒。当前没有以毫秒、微秒或纳秒为单位请求过期的语法。
逗号和等号前后的空格被忽略。不能重复密钥;在单个值中使用下列对密钥也是非法的:
maximumSize和maximumWeight weakValues和softValues
以及相关问题:
CaffeineSpec不支持使用非值参数配置咖啡因方法。这些必须在代码中配置。
有没有可能完成我的任务?
谢谢
发布于 2020-02-04 11:42:08
我设法让它起作用了。以下是代码:
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager("cache1",
"cache2", "cache3");
cacheManager.setCacheSpecification("recordStats");
return cacheManager;
}
}还有一个缺点,就是缓存名必须与@Cacheable(cachenames={"..."})注释中的名称匹配。
发布于 2020-02-04 00:40:31
您可以手动为缓存定义bean。
@Bean
public Cache recorded() {
return new CaffeineCache("recorded", Caffeine.newBuilder()
.recordStats()
.build());
}这个bean将由Spring获取,您将能够在代码中使用@Cacheable("recorded") (注意匹配的缓存名称)。
另外,我的咖啡因和Spring的宠物项目也可能对您有用:https://github.com/stepio/coffee-boots
这个精确的recordStats()设置功能没有在那里测试,但是bug报告和PRs总是很受欢迎的。
P.S.:相关问题:Dynamically toggling recording stats on Caffeine Cache
干杯!
https://stackoverflow.com/questions/59980554
复制相似问题