1. 程式人生 > >spring4配置基於註解的ehcache快取

spring4配置基於註解的ehcache快取

一、 ehcache配置檔案ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>

<ehcache name="es">

<diskStore path="java.io.tmpdir"/>

<defaultCache

        maxElementsInMemory="10000" 

eternal="false"

timeToIdleSeconds="30" 

timeToLiveSeconds="30" 

overflowToDisk="true">

</defaultCache>

<!-- 配置自定義快取 

maxElementsInMemory:快取中允許建立的最大物件數 

eternal:快取中物件是否為永久的,如果是,超時設定將被忽略,物件從不過期。 

timeToIdleSeconds:快取資料的鈍化時間,也就是在一個元素消亡之前, 兩次訪問時間的最大時間間隔值,這隻能在元素不是永久駐留時有效, 

如果該值是 就意味著元素可以停頓無窮長的時間。

timeToLiveSeconds:快取資料的生存時間,也就是一個元素從構建到消亡的最大時間間隔值, 

這隻能在元素不是永久駐留時有效,如果該值是0就意味著元素可以停頓無窮長的時間。 

overflowToDisk:記憶體不足時,是否啟用磁碟快取。 

memoryStoreEvictionPolicy:快取滿了之後的淘汰演算法。 -->

<cache name="statisticServiceCache" 

maxElementsInMemory="1000"

eternal="false" 

overflowToDisk="true" 

timeToIdleSeconds="900"

timeToLiveSeconds="1800" 

diskPersistent="false"

memoryStoreEvictionPolicy="LFU" />

</ehcache>

二、 spring-cache註解及ehcache bean
配置

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

<!-- cacheManager工廠類,指定ehcache.xml的位置 -->

<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

<property name="configLocation"  value="/WEB-INF/ehcache.xml"/>

<!-- <property name="shared"  value="true"/>   -->

</bean>

<!-- 宣告cacheManager -->

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">

<property name="cacheManager" ref="ehcache" />

</bean>

三、 確認開啟了springaop支援

<aop:aspectj-autoproxy/>

四、 Springcache註解的使用

1. @Cacheable

@Cacheable 主要的引數

value

快取的名稱,在 spring 配置檔案中定義,必須指定至少一個

例如:@Cacheable(value=”mycache”) 或者@Cacheable(value={”cache1”,”cache2”}

key

快取的 key,可以為空,如果指定要按照 SpEL 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合

例如:@Cacheable(value=”testcache”,key=”#userName”)

condition

快取的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行快取

例如:@Cacheable(value=”testcache”,condition=”#userName.length()

如下示例:

@Cacheable(value = "statisticServiceCache", key = "'activityChartData_' + #urlID")

public ResultInfo getActivityChartData(String urlID, Date startMonth,

Date endMonth) {

    …

}

這個註解用於,在呼叫被註解的方法時,首先檢查當前快取系統中是否存在鍵值為key的快取。如果存在,則直接返回快取物件,不執行該方法。如果不存在,則呼叫該方法,並將得到的返回值寫入快取中。

2. @CachePut

@CachePut 主要的引數

value

快取的名稱,在 spring 配置檔案中定義,必須指定至少一個

例如:@Cacheable(value=”mycache”) 或者@Cacheable(value={”cache1”,”cache2”}

key

快取的 key,可以為空,如果指定要按照 SpEL 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合

例如:@Cacheable(value=”testcache”,key=”#userName”)

condition

快取的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行快取

例如:@Cacheable(value=”testcache”,condition=”#userName.leng

@CachePut用於寫入快取,但是與@ Cacheable不同,@CachePut註解的方法始終執行,然後將方法的返回值寫入快取,此註解主要用於新增或更新快取。

3. @CacheEvict 

@CacheEvict 主要的引數

value

快取的名稱,在 spring 配置檔案中定義,必須指定至少一個

例如:@CachEvict(value=”mycache”) 或者@CachEvict(value={”cache1”,”cache2”}

key

快取的 key,可以為空,如果指定要按照 SpEL 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合

例如:@CachEvict(value=”testcache”,key=”#userName”)

condition

快取的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才清空快取

例如:@CachEvict(value=”testcache”,condition=”#userName.length()>2”)

allEntries

是否清空所有快取內容,預設為 false,如果指定為 true,則方法呼叫後將立即清空所有快取

例如:@CachEvict(value=”testcache”,allEntries=true)

beforeInvocation

是否在方法執行前就清空,預設為 false,如果指定為 true,則在方法還沒有執行的時候就清空快取,預設情況下,如果方法執行丟擲異常,則不會清空快取

例如:@CachEvict(value=”testcache”beforeInvocation=true)

@CacheEvict用於刪除快取