簡體   English   中英

EhCache - servlet 緩存

[英]EhCache - servlet caching

我正在為位於 servlet 中的方法制作緩存解決方案。

Servlet 如下所示:

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在一個項目中工作並以相同的方式配置,但沒有一個直接在 servlet 中(它們在服務中)。

我錯過了什么?

你在用Spring嗎? 如果是,請考慮 spring 文檔spring doc說:“使用代理時,您應該僅將 @Cache* 注釋應用於具有公共可見性的方法。如果您使用這些注釋對受保護、私有或包可見的方法進行注釋,則不會出現錯誤提出,但注釋的方法不顯示配置的緩存設置。如果您需要注釋非公共方法,因為它更改字節碼本身,請考慮使用 AspectJ(見下文)。” 因此,您應該將方法可見性更改為 protected to public

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM