ehcache和springMVC整合的使用

Spring单独使用Ehcache

       可以通过Spring自己单独的使用Ehcache的CacheManager或Ehcache对象。通过在Application Context中配置EhCacheManagerFactoryBean和EhCacheFactoryBean,我们就可以把对应的EhCache的CacheManager和Ehcache对象注入到其它的Spring bean对象中进行使用。

 

 EhCacheManagerFactoryBean

       EhCacheManagerFactoryBean是Spring内置的一个可以产生Ehcache的CacheManager对象的FactoryBean。其可以通过属性configLocation指定用于创建CacheManager的Ehcache配置文件的路径,通常是ehcache.xml文件的路径。如果没有指定configLocation,则将使用默认位置的配置文件创建CacheManager,这是属于Ehcache自身的逻辑,即如果在classpath根路径下存在ehcache.xml文件,则直接使用该文件作为Ehcache的配置文件,否则将使用ehcache-xxx.jar中的ehcache-failsafe.xml文件作为配置文件来创建Ehcache的CacheManager。此外,如果不希望创建的CacheManager使用默认的名称(在ehcache.xml文件中定义的,或者是由CacheManager内部定义的),则可以通过cacheManagerName属性进行指定。

 

EhCacheFactoryBean

       EhCacheFactoryBean是用来产生Ehcache的Ehcache对象的FactoryBean。定义EhcacheFactoryBean时有两个很重要的属性我们可以来指定。一个是cacheManager属性,其可以指定将用来获取或创建Ehcache的CacheManager对象,若未指定则将通过CacheManager.create()获取或创建默认的CacheManager。另一个重要属性是cacheName,其表示当前EhCacheFactoryBean对应的是CacheManager中的哪一个Ehcache对象,若未指定默认使用beanName作为cacheName。若CacheManager中不存在对应cacheName的Ehcache对象,则将使用CacheManager创建一个名为cacheName的Cache对象。此外我们还可以通过EhCacheFactoryBean的timeToIdle、timeToLive等属性指定要创建的Cache的对应属性,注意这些属性只对CacheManager中不存在对应Cache时新建的Cache才起作用,对已经存在的Cache将不起作用,更多属性设置请参考Spring的API文档。

配置流程:

1、建立ehcache.xml类:

 

<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

   

    <diskStore path="java.io.tmpdir/ehcache"/>

    

    <!-- 默认缓存 -->

    <defaultCache

  maxElementsInMemory="1000"

  eternal="false"

  timeToIdleSeconds="120"

  timeToLiveSeconds="120"

  overflowToDisk="false"/>

   

    <cache name="menuCache" 

           maxElementsInMemory="1000" 

           eternal="true"

  timeToIdleSeconds="0"

  timeToLiveSeconds="0"

  overflowToDisk="false" 

  memoryStoreEvictionPolicy="LRU"/>

    

</ehcache>

 

2、配置spring文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:task="http://www.springframework.org/schema/task"

xmlns:cache="http://www.springframework.org/schema/cache"  

xsi:schemaLocation="http://www.springframework.org/schema/beans  

                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  

                        http://www.springframework.org/schema/context  

                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  

                        http://www.springframework.org/schema/mvc  

                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

                        http://www.springframework.org/schema/task 

                        http://www.springframework.org/schema/task/spring-task.xsd

                        http://www.springframework.org/schema/cache  

                        http://www.springframework.org/schema/cache/spring-cache-3.2.xsd">

 

<!--获取上下文通用类-->

    <bean id="springConfigTool" class="team.tool.SpringConfigTool">  

    </bean>  

    

    <cache:annotation-driven cache-manager="cacheManager"/>  

      

    <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  

        <property name="configLocation" value="classpath:ehcache.xml" />  

    </bean>  

      

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">      

        <property name="cacheManager"  ref="cacheManagerFactory"/>      

    </bean>  

3、建立帮助类:

 

package team.tool;

 

 

import java.util.HashMap;  

import java.util.Map;

import org.springframework.cache.Cache;

import org.springframework.cache.Cache.ValueWrapper;

import org.springframework.cache.CacheManager;

 

/** 

 * cache管理器 

 *  

 * @author zhangjun

 *  

 */  

public class CacheStore {  

    private static CacheManager manager;  

    private static Cache cache;  

    static {  

        CacheStore cs = new CacheStore();  

        cs.init();  

    }  

  

    /** 

     * 初试化cache 

     */  

    private void init() {  

        manager = (CacheManager) SpringConfigTool.getBean("cacheManager");  

        cache = manager.getCache("menuCache");  

    }  

  

    /** 

     * 清除cache 

     */    

    private void destory() {  

    cache.clear();

    }  

  

    /** 

     * 得到某个key的cache值 

     *  

     * @param key 

     * @return 

     */  

    public static ValueWrapper get(String key) {

        return cache.get(key);  

    }  

  

    /** 

     * 清楚key的cache 

     *  

     * @param key 

     */  

    public static void remove(String key) {  

        cache.evict(key);

    }  

  

    /** 

     * 设置或更新某个cache值 

     *  

     * @param element 

     */  

    public static void put(ValueWrapper element) {  

        cache.put("", "");

    }  

      

    public static void removeAll(){  

        cache.clear();

    }  

  

  }  

4、使用:

@Cacheable(value="menuCache",key="'getList'+#queryMap+#pageBounds.getLimit()")  //存

public List getListByPage(Map<String, Object> queryMap, PageBounds pageBounds) throws Exception {

// TODO Auto-generated method stub

return fileLogDao.getListByPage(queryMap,pageBounds);

}

 

CacheStore.remove("getList");//删

ValueWrapper a = CacheStore.get("getList");//取

转载于:https://my.oschina.net/u/3745429/blog/1604793

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值