【踩坑記錄】使用ehcache緩存@Cacheable註解不生效的問題

遇到的問題爲:給某個查詢方法添加了@Cacheable註解,Junit測試通過,查詢方法執行多次時只有第一次執行方法體,之後調用方法查詢緩存,不進入方法體;但是在Controller內調用的時候多次調用發現每次都進入方法體,不走緩存。

查網上的解決辦法大多爲以下兩種:

1、由於@Cacheable基於SpringAOP的動態代理機制,程序執行時會在代理的方法前做緩存處理,但是如果一個類(比如一個加了@Service註解的)內部方法A調用內部的@Cacheable方法B,則會直接調用方法不會進行相應的處理。解決辦法是把A、B兩個方法放進不同的Service中。

2、不採用註解的方式,直接採用編程方式,取到 Ehcache 的 CacheManger 對象,把需要緩存的數據放到裏面,類似於使用 Map,緩存的邏輯自己控制;或者可以使用redis的緩存方式去添加緩存。

遇到的問題非如上兩種,僅做記錄。

解決辦法

經過反覆嘗試,發現需要把ehcache的註解開關配置到application-context.xml和servlet-spring.xml也就是springmvc的配置文件裏。如果只在context裏面配置,那麼只有Junit測試的時候緩存纔會生效。具體原因還沒搞清楚...

添加配置如下:

<cache:annotation-driven cache-manager="cacheManager"/>
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="ehcache"/>
    </bean>
    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:ehcache.xml"/>
    </bean>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章