Кофеин Springboot интеграции - PullRequest
0 голосов
/ 30 января 2020

мы используем кофеин для замены кэша 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.

initialCapacity=[integer]: sets Caffeine.initialCapacity.

...

recordStats: sets Caffeine.recordStats(). 

Длительности представлены целым числом, за которым следуют один из «d», «h», «m» или «s», обозначающий дни, часы, минуты или секунды соответственно. В настоящее время нет синтаксиса для запроса истечения в миллисекундах, микросекундах или наносекундах.

Пробелы до и после запятых и знаков равенства игнорируются. Ключи не могут повторяться; также недопустимо использовать следующие пары ключей в одном значении:

maximumSize and maximumWeight
weakValues and softValues 

И соответствующий пункт:

CaffeineSpe c не поддерживает настройку Кофеиновые методы с неценовыми параметрами. Они должны быть настроены в коде.

Нет ли возможности выполнить мою задачу?

спасибо

Ответы [ 2 ]

4 голосов
/ 04 февраля 2020

Вы можете определить бин для кэша вручную, например,

@Bean
public Cache recorded() {
    return new CaffeineCache("recorded", Caffeine.newBuilder()
            .recordStats()
            .build());
}

Этот бин будет выбран Spring Boot, и вы сможете использовать @Cacheable("recorded") в своем коде (обратите внимание на совпадающие имена кэша ).

Также мой домашний проект для Caffeine и Spring Boot может быть полезен и для вас: https://github.com/stepio/coffee-boots

Эта точная recordStats() функциональность установки не проверена там, но сообщения об ошибках и PR всегда приветствуются.

PS: Смежный вопрос: Динамическое переключение статистики записи на Caffeine Cache

Cheers!

1 голос
/ 04 февраля 2020

Мне удалось заставить его работать. Вот код:

@Configuration
public class CacheConfig {

  @Bean
  public CacheManager cacheManager() {
    CaffeineCacheManager cacheManager = new CaffeineCacheManager("cache1",
        "cache2", "cache3");
    cacheManager.setCacheSpecification("recordStats");
    return cacheManager;
  }
}

все еще с недостатком, что имена кеша должны совпадать с именами в @Cacheable(cachenames={"..."}) аннотации

...