Reputation: 11
I am using Spring Boot 2.7.2 and Caffeine 2.8.5. I have verified the cache is working correctly and all of the other manage/metrics endpoints for cache give the correct counts (cache.eviction.weight, cache.evictions, cache.gets, cache.size), but the count for cache.puts is always 0, even when there are many items put into the cache.
@Configuration
@ConfigurationProperties(prefix = "importantcache")
public class CaffeineCacheConfig {
private Long maxSize;
private Duration expire;
public Long getMaxSize() {
return maxSize;
}
public void setMaxSize(Long maxSize) {
this.maxSize = maxSize;
}
public Duration getExpire() {
return expire;
}
public void setExpire(Duration expire) {
this.expire = expire;
}
}
@Component
@EnableCaching
public class CaffeineCache {
private final CaffeineCacheConfig caffeineCacheConfig;
@Autowired
public CaffeineCache(CaffeineCacheConfig caffeineCacheConfig) {
this.caffeineCacheConfig = caffeineCacheConfig;
}
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager(
"cache1",
"cache2",
"cache3"
);
cacheManager.setCaffeine(caffeineCacheBuilder());
return cacheManager;
}
Caffeine<Object, Object> caffeineCacheBuilder() {
Long size = 1000L;
Duration expire = Duration.parse("PT1H");
if (caffeineCacheConfig.getMaxSize() != null) {
size = caffeineCacheConfig.getMaxSize();
}
if (caffeineCacheConfig.getExpire() != null) {
expire = caffeineCacheConfig.getExpire();
}
return Caffeine.newBuilder()
.maximumSize(size)
.expireAfterWrite(expire)
.recordStats();
}
}
I have also tried this alternative method in the above class for cacheManager() from this related question
@Bean
public CacheManager cacheManager(MeterRegistry meterRegistry) {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager() {
protected com.github.benmanes.caffeine.cache.Cache<Object, Object> createNativeCaffeineCache(String name) {
return CaffeineCacheMetrics.monitor(meterRegistry, super.createNativeCaffeineCache(name), name);
}
};
caffeineCacheManager.setCaffeine(caffeineCacheBuilder());
return caffeineCacheManager;
}
Any ideas on what else to try to make the cache.puts endpoint accurate?
Upvotes: 1
Views: 1158