Главная » Spring » Настройка кеширования Spring

0

Несмотря на то что модуль Spring Modules Cache предоставляет прокси-объект для перехвата вызовов методов, сохраняющий ре- зультаты в кеше, он не имеет собственной реализации кеша. Вмес- то этого опирается на использование сторонних решений. Модулем поддерживаются несколько механизмов кеширования, включая сле- дующие:

# EHCache;

# GigaSpaces; Q JBoss Cache; Q JCS;

#  OpenSymphony OSCache;

#  Tangosol Coherence.

Для использования в примере приложения RoadRantz я выбрал механизм EHCache. Это решение основано в первую очередь на мо- ем собственном опыте работы с EHCache и на том обстоятельстве, что это решение свободно доступно в репозитории Maven по адре- су: www.ibiblio.org. Однако независимо от выбора настройки модуля Spring Modules Cache будут очень похожи для любых решений.

В первую очередь необходимо создать новый конфигурацион- ный файл Spring, куда будут помещаться настройки механизма ке- ширования. В принципе, настройки Spring Modules Cache можно поместить в любой конфигурационный файл Spring, загружаемый вместе с приложением RoadRantz, но их лучше хранить отдельно. Поэтому создадим файл roadrantz-cache.xml, куда поместим парамет- ры настройки механизма кеширования.

Как и в любых других конфигурационных файлах Spring, кор- невым элементом в файле roadrantz-cache.xml  должен быть элемент

<beans>. Однако, чтобы воспользоваться преимуществами поддержки EHCache в Spring Modules, в элемент <beans> следует добавить объ- явление пространства имен ehcache:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ehcache="http://www.springmodules.org/schema/ehcache" xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/

➥    springmodules-ehcache.xsd">

</beans>

В приложении RoadRantz предполагается использовать механизм кеширования EHCache, но если вы отдадите предпочтение другому механизму, следует заменить объявления пространства имен и схе- мы на соответствующие вашему выбору. В табл. 6.6 перечислены все пространства имен, а также URI пространств имен и соответ- ствующих им схем.

Независимо от выбранного механизма кеширования для его на- стройки будут использоваться одни и те же элементы конфигури- рования Spring, которые перечислены в табл. 6.7.

Таблица 6.6. Пространства имен и схемы различных механизмов кеширования, поддерживаемых модулем Spring Modules

Пространство имен

URI пространства имен

URI схемы

ehcache

http://www.springmodules.org/ schema/ehcache

http://www.springmodules. org/schema/cache/ springmodulesehcache.xsd

gigaspaces

http://www.springmodules.org/ schema/gigaspaces

http://www.springmodules. org/schema/cache/ springmodulesgigaspaces.xsd

jboss

http://www.springmodules.org/ schema/jboss

http://www.springmodules. org/schema/cache/ springmodulesjboss.xsd

jcs

http://www.springmodules.org/ schema/jcs

http://www.springmodules.org/ schema/cache/springmodules- jcs.xsd

oscache

http://www.springmodules.org/ schema/oscache

http://www.springmodules. org/schema/cache/ springmodulesoscache.xsd

tangosol

http://www.springmodules.org/ schema/tangosol

http://www.springmodules. org/schema/cache/ springmodulestangosol.xsd

Таблица 6.7. Элементы конфигурирования Spring Modules

Конфигурационный элемент

Назначение

<namespace:annotations>

Объявляет кешированные методы, помечая их аннотациями Java 5

<namespace:commons-attributes>

Объявляет кешированные методы, помечая их метаданными Jakarta Commons Attributes

<namespace:config>

Содержит настройки механизма кеширования EHCache в файлах конфигурации Spring

<namespace:proxy>

Объявляет кешированные методы, определяя прокси-объект в XML-конфигурации Spring

Поскольку в примере решено использовать механизм кеширова- ния EHCache, необходимо сообщить фреймворку Spring, где искать конфигурационный файл EHCache1. Воспользуемся для этого эле- ментом <ehcache:config>:

<ehcache:config

configLocation="classpath:ehcache.xml" />

Атрибут configLocation в этом фрагменте сообщает фреймворку Spring, что файл с настройками EHCache следует загружать из кор- ня библиотеки классов (classpath) приложения.

Настройка EHCache

Внешний файл ehcache.xml для нашего примера содержит настрой- ки, как показано в листинге 6.9.

Листинг 6.9. Настройки механизма EHCache в файле ehcache.xml

<ehcache>

<defaultCache

maxElementsInMemory="500" overflowToDisk="false" memoryStoreEvictionPolicy="LFU"

eternal="true"  />                 <!–  Настройка  кеша  по  умолчанию  –>

1 На момент написания этих строк конфигурацию EHCache (и других механизмов кэширования) все еще приходилось определять во внешних XML-файлах, используя наборы элементов, характерные для каждого ме- ханизма. Но в будущих версиях, возможно, появится поддержка опреде- ления настроек с помощью элемента <namespace:config>, что избавит от необходимости использовать внешние файлы.

<cache  name="rantzCache" maxElementsInMemory="500" overflowToDisk="false" memoryStoreEvictionPolicy="LFU"  />

eternal="true"                         <!–  Настройки  кеша  rantzCache  –>

</ehcache>

В этом фрагменте выполнена настройка двух кешей, управляе- мых механизмом EHCache. Элемент <defaultCache> является обяза- тельным и описывает кеш, который будет использоваться, когда не будет найден более подходящий кеш. Элемент <cache> определяет другие кеши и может содержаться в файле ehcache.xml ноль или бо- лее раз (по одному для каждого кеша). Здесь определяется только один кеш, используемый не по умолчанию, – rantzCache.

Атрибуты элементов <defaultCache> и <cache> описывают поведение кешей. В табл. 6.8 перечислены атрибуты, которые можно использо- вать при настройке кешей в EHCache.

Таблица 6.8. Атрибуты настройки кеша в EHCache

Атрибут

Назначение

diskExpiryThreadIntervalSeconds

Интервал (в секундах) удаления устаревших записей из дискового кеша. (Значение

по умолчанию: 120 сек.)

diskPersistent

Восстанавливать ли данные из дискового кеша после перезапуска VM. (Значение по умолчанию: false)

eternal

Следует ли рассматривать элементы в кеше как «вечные». Срок хранения «вечных» эле- ментов никогда не истечет. (Обязательный)

maxElementsInMemory

Максимальное число элементов кеша, храни- мых в памяти. (Обязательный)

memoryStoreEvictionPolicy

Алгоритм вытеснения элементов кеша из памяти по достижении предела

maxElementsInMemory. По умолчанию применяет-

ся алгоритм с вытеснением по наибольшему времени неиспользования (LRU). Доступны так- же алгоритм «первым пришел, первым ушел» (FIFO) и алгоритм с вытеснением

по меньшей частоте использования (LFU).

(Значение по умолчанию: LRU)

name

Имя кеша. (Обязательный)

overflowToDisk

Допускается ли сбрасывать элементы в дис- ковый кеш из памяти по достижении предела maxElementsInMemory. (Обязательный)

Таблица 6.8 (окончание)

Атрибут

Назначение

timeToIdleSeconds

Интервал (в секундах) между обращениями

к элементу кеша, прежде чем истечет срок его хранения. Значение 0 указывает, что элементы будут храниться в кеше независимо от величи- ны интервала между обращениями. (Значение по умолчанию: 0)

timeToLiveSeconds

Время (в секундах), в течение которого эле- мент может оставаться в кеше, прежде чем истечет срок его хранения. Значение 0 ука- зывает, что элементы будут храниться в кеше

«вечно». (Значение по умолчанию: 0)

Для приложения RoadRantz был настроен один кеш по умолча- нию (потому что EHCache требует его наличия) и еще один кеш с именем rantzCache, который будет играть роль основного кеша. Оба кеша настроены так, что они будут хранить до 500 элементов («вечно») с вытеснением по наибольшему времени неиспользова- ния. Кроме того, конфигурация не предусматривает возможного со- хранения вытесняемых элементов на диске1.

Закончив настройку механизма EHCache в контексте приложе- ния Spring, можно перейти к объявлению компонентов и их методов, результаты выполнения которых должны кешироваться. Начнем с объявления прокси-объекта, который будет выполнять кеширова- ние значений, возвращаемых методами объектов DAO в приложе- нии RoadRantz.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии