Spring 3.0.5 MVC 基于注解ehcache.xml 配置方式

Spring 3.0.5的,更细颗粒化的缓存设置,更方便的注解,可以具体到把每个方式的返回值做缓存, 

需要 ehcache-spring-annotations-1.1.x

applicationContext.xml

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3  xmlns:aop="http://www.springframework.org/schema/aop"
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:p="http://www.springframework.org/schema/p"
 6  xmlns:tx="http://www.springframework.org/schema/tx"
 7  xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
 8  xsi:schemaLocation="http://www.springframework.org/schema/beans 
 9   http://www.springframework.org/schema/beans/spring-beans.xsd
10   http://www.springframework.org/schema/aop 
11   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
12   http://www.springframework.org/schema/context 
13   http://www.springframework.org/schema/context/spring-context-3.0.xsd
14   http://www.springframework.org/schema/tx 
15   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
16   http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring   
17   http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
18 
19 <ehcache:annotation-driven cache-manager="ehCacheManager" /> 
20  
21  <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
22        <property name="configLocation" value="classpath:ehcache.xml" />  
23    </bean> 

其次,src下的ehcache.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3  xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
 4  updateCheck="false">
 5  <diskStore path="java.io.tmpdir" />
 6  <defaultCache eternal="false" 
 7    maxElementsInMemory="1000"
 8    overflowToDisk="false" 
 9    diskPersistent="false" 
10    timeToIdleSeconds="0"
11    timeToLiveSeconds="600" 
12    memoryStoreEvictionPolicy="LRU" />
13 
14  <cache name="departCache" 
15    eternal="false"
16    maxElementsInMemory="100"
17    overflowToDisk="false"
18    diskPersistent="false" 
19    timeToIdleSeconds="0"
20    timeToLiveSeconds="300"
21    memoryStoreEvictionPolicy="LRU" />
22 
23 </ehcache>

DAO层缓存:例如下边这个方法的返回值需要缓存: 

@SuppressWarnings("unchecked") 
//spring 3 基于注解ehcache缓存配置; 
@Cacheable(cacheName="departCache") 
public List<AppDepart> getChildDepart(Integer id) throws Exception { 
  return  this.getHibernateTemplate().find("from AppDepart  where state=1 and idParent="+id); 


@Cacheable(cacheName="departCache") 加上这句话,其中cacheName 对应ehcache.xml  中的<cache name="departCache" 

这样这个方法返回值就可以被缓存起来的了,但是怎么样把缓存数据和数据库中的数据实现同步呢? 

如果对这个PO做update ,save,delete 可以实现这样策略如下: 

@Transactional(propagation = Propagation.REQUIRED) 
//设定spring的ecache缓存策略,当编辑机构时候,把缓存全部清除掉,以达到缓存那数据同步; 
@TriggersRemove(cacheName="departCache",removeAll=true) 
public boolean editDepart(String depno, String depName) { 
  boolean flag = false; 
  try { 
   AppDepart depart = departDao.getAppdepart(depno); 
   depart.setDepName(depName); 
   departDao.update(depart); 
   flag = true; 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
  return flag; 


好了到此配置完毕,但是更加详细缓存配置策略需要研究(例如:当update数据时候,不全部清掉缓存,就可以达到与数据库同步效果) 

 

posted @ 2012-09-18 16:49  daveztong  阅读(1093)  评论(0编辑  收藏  举报