使用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;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章