使用encache

1、将spring的applicationContext.xml配置到web.xml下
<!-- Introspector 缓存清除监听器 -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
2、将applicationContext-cache.xml配置到applicationContext.xml下
<import resource="applicationContext-cache.xml" />
3、将ehcache.xml配置到applicationContext-cache.xml,同时配置起服务即加载缓存的类systemLoad下
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:config/ehcache.xml" />
</bean>
<bean id="areaCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="cacheManager" />
<property name="cacheName" value="areaCache"/>
</bean>
<bean id="systemLoad" class="cn.com.umessage.lugc.utils.SystemLoad" />
4、配置ehcache.xml
<ehcache>
<!--
Sets the path to the directory where cache .data files are created. If
the path is a Java System Property it is replaced by its value in the
running VM. The following properties are translated: user.home -
User's home directory user.dir - User's current working directory
java.io.tmpdir - Default temp file path
-->
<diskStore path="java.io.tmpdir" />
<!-- 
    <diskStore path="/usr/local/lugc_cms/tmpdir" />
     -->
<!--
Default Cache configuration. These will applied to caches
programmatically created through the CacheManager. The following
attributes are required: maxElementsInMemory - Sets the maximum number
of objects that will be created in memory eternal - Sets whether
elements are eternal. If eternal, timeouts are ignored and the element
is never expired. overflowToDisk - Sets whether elements can overflow
to disk when the in-memory cache has reached the maxInMemory limit.

The following attributes are optional: timeToIdleSeconds - Sets the
time to idle for an element before it expires. i.e. The maximum amount
of time between accesses before an element expires Is only used if the
element is not eternal. Optional attribute. A value of 0 means that an
Element can idle for infinity. The default value is 0.
timeToLiveSeconds - Sets the time to live for an element before it
expires. i.e. The maximum time between creation time and when an
element expires. Is only used if the element is not eternal. Optional
attribute. A value of 0 means that and Element can live for infinity.
The default value is 0. diskPersistent - Whether the disk store
persists between restarts of the Virtual Machine. The default value is
false. diskExpiryThreadIntervalSeconds- The number of seconds between
runs of the disk expiry thread. The default value is 120 seconds.
-->
<defaultCache maxElementsInMemory="10000" eternal="false"
overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />
<cache name="areaCache" maxElementsInMemory="10000" eternal="true"
overflowToDisk="true" />
<!--
See http://ehcache.sourceforge.net/documentation/#mozTocId258426 for
how to configure caching for your objects
-->
</ehcache>
其中<diskStore path="java.io.tmpdir" />表示缓存文件存放的路径
5、编写文件使用ehcache
publicclass InitializeCache { public static void initArea(AreaDaoareaDao, Cache cache){ finalList<Area> areaList =areaDao.queryAll(); Map<Integer,List<Area>>includeList = new HashMap<Integer,List<Area>>();List<Area> province = newArrayList<Area>(); for(Area area :areaList){ //将所有省保存 if(area.getParentId() == 0){province.add(area); if(includeList.get(area.getId()) == null){includeList.put(area.getId(), newArrayList<Area>()); }processArea(area, areaList, includeList); } }if(cache.get("province") == null){ Element element = newElement("province", province); cache.put(element); }if(cache.get("AreaInculde") == null){ Element element = newElement("AreaInculde", includeList); cache.put(element); } } publicstatic void processArea(Area _area,List<Area> areaList,Map<Integer,List<Area>>includeList){ for(int i=0; i<areaList.size(); i++){Area area = areaList.get(i); if(_area.getId() ==area.getParentId()){ includeList.get(_area.getId()).add(area); } }} }
6、编写文件systemLoad文件在服务启动时使用ehcache
package cn.com.umessage.lugc.utils;

import java.util.List;

import net.sf.ehcache.Cache;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

import cn.com.umessage.lugc.common.dao.AreaDao;


public class SystemLoad implements BeanPostProcessor{

private Cache areaCache;

public Cache getAreaCache() {
return areaCache;
}

public void setAreaCache(Cache areaCache) {
this.areaCache = areaCache;
}

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if("areaDao".equals(beanName)){
System.out.println("对象" + beanName + "开始实例化");
}
return bean;
}

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if("areaDao".equals(beanName)){
InitializeCache.initArea((AreaDao)bean, areaCache);
System.out.println("对象" + beanName + "实例化完成, 缓存加载成功, 缓存名称:" + areaCache.getName());
}
return bean;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章