Есть ли способ сообщить 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, однако я с радостью помогу, если возникнут какие-либо проблемы.