缓存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:aop="http://www.springframework.org/schema/aop"

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

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

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

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

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

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

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

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

default-lazy-init="true">

 

<!-- Activates scanning of @Service -->

<context:component-scan base-package="zyl.mybatisspring.**.service" />

<!-- 缓存配置 -->

<!-- 启用缓存注解功能(请将其配置在Spring主配置文件中) -->

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

 

<!-- Spring自己的基于java.util.concurrent.ConcurrentHashMap实现的缓存管理器(该功能是从Spring3.1开始提供的) -->

<!-- <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> 

    <property name="caches"> <set> <bean name="myCache" class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"/> 

    </set> </property> </bean> -->

 

<!-- 若只想使用Spring自身提供的缓存器,则注释掉下面的两个关于Ehcache配置的bean,并启用上面的SimpleCacheManager即可 -->

<!-- Spring提供的基于的Ehcache实现的缓存管理器 -->

<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>


</beans>

 

 

 

注意点:

1、在哪层使用,就在哪层进行配置。大部分都是在Service层进行使用的,所以cache的配置应该写在Service层的配置文件中,如果每层的文件不是分的很清晰,那么cache的配置还是和Service的注解配置放在一块比较好。

2、使用缓存时有两种配置方法,一种是使用spring3.1 后自带的cache机制,另一种就是引入专门的缓存技术,例如Ehcache,配置方法见上面的详细配置及说明。

3、Service层使用缓存注解时,value值必须是spring配置文件或者ehcache配置中cache名称,可以配置多个名称。

4、正确使用@Cacheable@CachePut@CacheEvict 注释

 

详细内容可以参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/

 

 

如果使用ehcache进行配置,那么 Ehcache.xml的配置示例:

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

<ehcache dynamicConfig="false" monitoring="off" updateCheck="false"  

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

      

    <!-- 定义缓存策略  

        eternal="false"                 // 元素是否永恒,如果是就永不过期(必须设置)  

        maxEntriesLocalHeap="1000"      // 堆内存中最大缓存对象数,0没有限制(必须设置)  

        overflowToDisk="false"          // 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)  

        diskPersistent="false"          // 磁盘缓存在VM重新启动时是否保持(默认为false)  

        timeToIdleSeconds="0"           // 导致元素过期的访问间隔(秒为单位). 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0  

        timeToLiveSeconds="600"         // 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期  

        memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU  

   -->  

    <defaultCache eternal="false" maxEntriesLocalHeap="0" timeToIdleSeconds="300" timeToLiveSeconds="300"/>  

    <cache name="myCache" maxEntriesLocalHeap="1000" />   

     

</ehcache>