使用encache

1、将spring的applicationContext.xml配置到web.xml下
<!-- Introspector 缓存清除监听器 -->
       <listener>
             <listener-class>org.springframework.web.util.IntrospectorCleanupListe ner</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.EhCacheManagerFactoryBea n">
<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. diskExpiryThreadInterval Seconds- 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" diskExpiryThreadInterval Seconds="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 postProcessBeforeInitial ization(Object bean, String beanName) throws BeansException {
if("areaDao".equals(beanName)){
System.out.println("对象" + beanName + "开始实例化");
}
return bean;
}

public Object postProcessAfterInitiali zation(Object bean, String beanName) throws BeansException {
if("areaDao".equals(beanName)){
InitializeCache.initArea((AreaDao)bean, areaCache);
System.out.println("对象" + beanName + "实例化完成, 缓存加载成功, 缓存名称:" + areaCache.getName());
}
return bean;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值