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:快取資料的鈍化時間,也就是在一個元素消亡之前, 兩次訪問時間的最大時間間隔值,這隻能在元素不是永久駐留時有效, 如果該值是 0 就意味著元素可以停頓無窮長的時間。 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> |
三、 確認開啟了spring的aop支援
<aop:aspectj-autoproxy/> |
四、 Spring的cache註解的使用
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用於刪除快取