EhCache - кэширование сервлетов - PullRequest
0 голосов
/ 31 марта 2020

Я делаю решение для кэширования для метода, расположенного в сервлете.

Сервлет выглядит следующим образом:

public class DataOptimizedServlet extends DataServlet {
    ...
    @Override
    @Cacheable(value = "dataOptimized", key = "#req.getRequestURI()")
    public byte[] getData(HttpServletRequest req) {
        // data retrieval logic
    }
    ...
}

в ehcache. xml У меня есть следующая конфигурация:

<cache alias="dataOptimized">
    <expiry>
        <ttl unit="hours">30</ttl>
    </expiry>
    <resources>
        <heap unit="entries">20000</heap>
        <offheap unit="MB">200</offheap>
    </resources>
</cache>

Также в файле ctx-cache.xml есть следующая конфигурация ( и этот файл импортируется в web.xml):

<cache:annotation-driven cache-manager="ehCacheManager" />

<bean id="ehCacheManager" class="org.springframework.cache.jcache.JCacheCacheManager">
    <property name="cacheManager">
        <bean class="org.springframework.cache.jcache.JCacheManagerFactoryBean" p:cacheManagerUri="classpath:ehcache.xml" />
    </property>
</bean>

Но он не работает, метод getData по-прежнему используется для тех же URL-адресов. У меня много @Cacheables, работающих в проекте и настроенных таким же образом, но ни один из них не находится в сервлете напрямую (они в службах).

Чего мне не хватает?

1 Ответ

0 голосов
/ 31 марта 2020

вы используете Spring? Если да, учтите, что в документации по Spring spring do c говорится: «При использовании прокси вы должны применять аннотации @ Cache * только к методам с видимостью publi c. Если вы делаете аннотацию защищенную, приватную или видимые в пакете методы с этими аннотациями, ошибка не возникает, но аннотированный метод не отображает настроенные параметры кэширования. Рассмотрите возможность использования AspectJ (см. ниже), если необходимо аннотировать неопубликованные c методы при их изменении. сам байт-код ". Поэтому вы должны изменить видимость вашего метода для защищенного на publi c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...