我们正在使用Spring Boot 2和Spring Actuator。在创建如下所示的缓存时:
@Bean
public CaffeineCache someCache() {
return new CaffeineCache("my-cache",
Caffeine.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.SECONDS)
.build());
}
它已注册到Spring Actuator中,并且可以通过端点进行访问和处理:
❯ http GET localhost:8080/actuator/caches
{
"cacheManagers": {
"cacheManager": {
"caches": {
"my-cache": {
"target": "com.github.benmanes.caffeine.cache.BoundedLocalCache$BoundedLocalManualCache"
}
}
}
}
}
但是,这在使用注释@Cacheable
时有效-但我想创建一个缓存并将其用作地图。
因此,我可以创建:
@Bean
public com.github.benmanes.caffeine.cache.Cache<String, MyObject> customCache(QueryServiceProperties config) {
return Caffeine.newBuilder()
.maximumSize(10)
.expireAfterAccess(10, TimeUnit.SECONDS)
.build();
}
它可以工作,但 Spring Actuator 无法发现它。有什么方法可以注册这种缓存吗?
答案 0 :(得分:1)
为此Answer改编而成,我执行了以下操作:
@Autowired
private CacheMetricsRegistrar cacheMetricsRegistrar;
private LoadingCache<Key, MyObject> cache;
@PostConstruct
public void init() {
cache = Caffeine.newBuilder()
.maximumSize(10_000)
.refreshAfterWrite(cacheDuration)
.recordStats()
.build(this::loadMyObject);
// trick the compiler
Cache tmp = cache;
cacheMetricsRegistrar.bindCacheToRegistry(new CaffeineCache(CACHE_NAME, tmp), Tag.of("name", CACHE_NAME));
}
缓存现在应显示在缓存执行器端点中,例如“ http://localhost:8080/metrics/cache.gets”
答案 1 :(得分:0)
使用CacheManager
将您的自定义缓存添加到 CacheManager
,注入 CacheManager
并取出该缓存供您使用。
请参阅 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-caching.html 了解更多详情