1.先在src创建ehcache.xml配置文件
<ehcache> <diskStore path="java.io.tmpdir"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600" timeToLiveSeconds="600" overflowToDisk="true" /> <cache name="randomObjCache" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600" timeToLiveSeconds="600" overflowToDisk="true" /> </ehcache>
2.在context中引入cacheManage相关配置,以便在bean中引用cache,这里我在applicationContext-dao.xml中加入
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="randomDao" class="com.zjr.dao.impl.RandomDaoImpl"> <property name="sqlMapClient" ref="sqlMapClient"/> </bean> <!-- ################### Cache ############################ --> <bean id="defaultCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation"> <value>classpath:/ehcache.xml</value> </property> <!-- <property name="configLocation" value="/WEB-INF/conf/ehcache.xml" /> --> </bean> <bean id="randomCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> <property name="cacheManager"> <ref local="defaultCacheManager"/> </property> <property name="cacheName"> <value>randomObjCache</value> </property> </bean> <bean id="cacheRandomDao" class="com.zjr.dao.impl.CacheRandomDaoImpl"> <property name="target" ref="randomDao"></property> <property name="cache" ref="randomCache"></property> </bean> <!-- ################### Cache ############################ --> </beans>
3.CacheRandomDaoImpl 中使用
private RandomDao target;
private Cache cache;
private final static String cacheKey = "randomObjCache";
public void setCache(Cache cache) {
this.cache = cache;
}
public List<RandomObj> getCacheRandomObj(Integer flag) {
// TODO Auto-generated method stub
Element element = cache.get(cacheKey);
if (element == null) {
// 当cache中没有数据的时候,从target中取数据,target为实体DAO
List<RandomObj> result = target.getCacheRandomObj(flag);
System.out.println("set into cache");
// cache method result
element = new Element(cacheKey, (Serializable) result);
cache.put(element);
//测试CACHE
// for(int i=0;i<10000;i++){
// element = new Element(cacheKey+i, new RandomObj());
// cache.put(element);
// }
}
System.out.println("out cache");
return (List<RandomObj>)element.getValue();
}
ehcache.xml中的相关属性可参照
http://catastiger.iteye.com/blog/656653