JCache CacheResult - создание кешей с именем по умолчанию - PullRequest
1 голос
/ 08 июля 2019

Я использую аннотации JCache с Spring и EhCache.Если я использую @CacheResult для метода без указания имени кэша (или @CacheDefaults для класса), тогда имя кэша по умолчанию разрешается в полное имя метода.Однако такой кэш не найден, если только он явно не создан с использованием CacheManager.Это может быть управляемым для нескольких таких методов с поддержкой кэширования, но не в том случае, если мне нужно вручную создать 50 различных кэшей.

Есть ли способ сообщить Spring (или любому исполнителю JCache) автоматически создавать кэши с именем по умолчанию, если оно не найдено?Это позволило бы мне использовать @CacheResult для любого метода без необходимости каждый раз обновлять конфигурацию кэша.

1 Ответ

0 голосов
/ 09 июля 2019

Есть ли способ сообщить Spring (или любому исполнителю JCache) автоматически создавать кэши с именем по умолчанию, если оно не найдено?

Эта проблема описана в cache2k . Вы можете настроить cache2k для использования конфигурации по умолчанию, если запрошенное имя кэша неизвестно.

Вот пример конфигурации XML для этого сценария, который помещается в /cache2k.xml в пути к классам:

<cache2k xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
         xmlns='https://cache2k.org/schema/v1.x'
         xsi:schemaLocation="https://cache2k.org/schema/v1.x https://cache2k.org/schema/cache2k-core-v1.x.xsd">
  <version>1.0</version>
  <ignoreMissingCacheConfiguration>true</ignoreMissingCacheConfiguration>
  <defaults>
    <!-- default settings for every cache -->
    <cache>
      <entryCapacity>100_000</entryCapacity>
      <expireAfterWrite>5m</expireAfterWrite>
    </cache>
  </defaults>
  <templates>
    <cache>
      <name>shortExpiry</name>
      <expireAfterWrite>5m</expireAfterWrite>
    </cache>
    <cache>
      <name>lessResilient</name>
      <resilienceDuration>1m</resilienceDuration>
    </cache>
  </templates>
  <caches>
    <cache>
      <name>products</name>
      <entryCapacity>10_000</entryCapacity>
      <include>shortExpiry,lessResilient</include>
    </cache>
    <cache>
      <name>users</name>
      <entryCapacity>1000</entryCapacity>
      <include>shortExpiry</include>
    </cache>
  </caches>
</cache2k>

По умолчанию, в соответствии с этой конфигурацией, кэш без определенной записи конфигурации получит ограничение в 100 КБ и истечение 5 минут. Конфигурация может быть подходящей для трасс в производстве. Позже вы или системный оператор можете проверить существующие кэши и их производительность с помощью JMX, а затем добавить более конкретную конфигурацию кэша, как только возникнет такая необходимость. Если у вас много кэшей, в конфигурации есть механизм шаблонов, чтобы избежать повторения.

Может случиться так, что кешам нужна предварительная конфигурация, а некоторым - нет. Я предлагаю разделить их на разные менеджеры кеша.

Если вам нужен кэш в процессе, cache2k - хорошая альтернатива EHCache. Это намного быстрее и эффективнее с точки зрения памяти.

Вы можете использовать cache2k через JCache, однако есть и прямая поддержка Spring Framework. Подробнее см. Руководство пользователя Spring Framework Section .

В настоящее время я являюсь автором cache2k и не являюсь активным пользователем Spring, однако я с радостью помогу, если возникнут какие-либо проблемы.

...