Doc*_*nes 0 java caching spring-boot caffeine
我们使用 caffeine 来替换 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;
}
}
Run Code Online (Sandbox Code Playgroud)
缓存统计信息不会出现在 /actuator/cache/{caches}端点或我们的 springboot-admin 服务器中。
从当前的 api 文档中,我发现:
字符串语法是一系列以逗号分隔的键或键值对,每个对应于一个 Caffeine 构建器方法。
Run Code Online (Sandbox Code Playgroud)initialCapacity=[integer]: sets Caffeine.initialCapacity....
Run Code Online (Sandbox Code Playgroud)recordStats: sets Caffeine.recordStats().持续时间由一个整数表示,后跟“d”、“h”、“m”或“s”之一,分别代表天、小时、分钟或秒。目前没有以毫秒、微秒或纳秒为单位请求过期的语法。
忽略逗号和等号前后的空格。密钥不得重复;在单个值中使用以下键对也是非法的:
Run Code Online (Sandbox Code Playgroud)maximumSize and maximumWeight weakValues and softValues
以及相关的一点:
CaffeineSpec 不支持使用非值参数配置 Caffeine 方法。这些必须在代码中配置。
有没有可能完成我的任务?
谢谢
您可以手动为缓存定义 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 上的记录统计信息
干杯!
| 归档时间: |
|
| 查看次数: |
4351 次 |
| 最近记录: |