今天下午作了一下緩存整合在項目中,之前沒有用過也沒有學過。都知道spring已經對Ehcache進行了很好的支持,個人spring版本是3.2.2在spring-context-support.jar包中能夠看到.之前的版本可能會不太同樣。 java
我下的ehcache是ehcache-web-2.0.4-distribution.gz和ehcache-2.7.3-distribution.tar.gz一個作頁面的緩存一個作查詢的緩存。 web
echcache的配置也不說了網上一大堆,並且解釋的也很清楚。可是spring基於註解的整合好像還不太同樣,好吧看官方文檔進行配置好一點。 spring
官網上有這麼一句話:EHCache support moved to spring-context-support 看來之前的版本還不是在上面提到的那個包中。接着看配置吧: sql
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <cache:annotation-driven /> </beans>這是官方文檔中的基於註解的XML配置若是加上緩存的配置的話上面的配置還要加上下面這一句:
xmlns:p="http://www.springframework.org/schema/p"緩存的配置以下:
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache"/> <!-- EhCache library setup --> <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="classpath:ehcache.xml" p:shared="true"/>
OK!!緩存已經完成了 數據庫
說明一下官網上沒有p:shared="true"在配echcahe的時候,這時啓動會報一個錯誤: 緩存
net.sf.ehcache.CacheException:Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following我找了半天也不知道起動的時候哪還建立了一個CancheManager但加上 p:shared="true"就沒事了。命名空間的p打不開我也不知道是什麼意思。請高手指點。我以爲大概意思就是使用一個cache吧。
作一個簡單的測試! ide
@Cacheable(value="sampleCache1",key="#id") public T getById(String id) { return (T) getSession().get(clazz, id); }在baseDao的get方法上進行配置在測試類中用userService服務進行測試看輸出幾條sql語句:
test類 測試
public class CancheSpring extends BaseSpringTest { @Resource private UserService userService; @Test public void testGetCanche(){ String id = "40288183401e060a01401e06116b0000"; User user = userService.getById(id); System.out.println(user); User user2 = userService.getById(id); System.out.println(user2); } }固然id我從數據庫中直接copy出來的UUID.輸出結果以下:
OK。很明顯能夠看到兩個對象是如出一轍的。好吧配置成功能了能夠在其餘須要的地方方便使用。還有一個註解是@CacheEvict是刪除操做。頁面緩存明天再寫,也有好多不明白的地方。@曉駿 看完記的指點一下哈! spa