博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ehcache-spring-annotations开启ehcache的注解功能
阅读量:5023 次
发布时间:2019-06-12

本文共 6147 字,大约阅读时间需要 20 分钟。

Spring 3.0.5的,更细颗粒化的缓存设置,更方便的注解,可以具体到把每个方式的返回值做缓存, 需要 ehcache-spring-annotations-1.1.x。

下载地址是:http://code.google.com/p/ehcache-spring-annotations

首先,applicationContext.xml 

 

Xml代码  
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.  xmlns:aop="http://www.springframework.org/schema/aop"  
  4.  xmlns:context="http://www.springframework.org/schema/context"  
  5.  xmlns:p="http://www.springframework.org/schema/p"  
  6.  xmlns:tx="http://www.springframework.org/schema/tx"  
  7.  xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"  
  8.  xsi:schemaLocation="http://www.springframework.org/schema/beans   
  9.   http://www.springframework.org/schema/beans/spring-beans.xsd  
  10.   http://www.springframework.org/schema/aop   
  11.   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  12.   http://www.springframework.org/schema/context   
  13.   http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  14.   http://www.springframework.org/schema/tx   
  15.   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  16.   http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring     
  17.   http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">  
  18.   
  19. <ehcache:annotation-driven cache-manager="ehCacheManager" />   
  20.    
  21.  <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">    
  22.        <property name="configLocation" value="classpath:ehcache.xml" />    
  23.    </bean>   

其次,src下的ehcache.xml 

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.  xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"  
  4.  updateCheck="false">  
  5.  <diskStore path="java.io.tmpdir" />  
  6.  <defaultCache eternal="false"   
  7.    maxElementsInMemory="1000"  
  8.    overflowToDisk="false"   
  9.    diskPersistent="false"   
  10.    timeToIdleSeconds="0"  
  11.    timeToLiveSeconds="600"   
  12.    memoryStoreEvictionPolicy="LRU" />  
  13.   
  14.  <cache name="departCache"   
  15.    eternal="false"  
  16.    maxElementsInMemory="100"  
  17.    overflowToDisk="false"  
  18.    diskPersistent="false"   
  19.    timeToIdleSeconds="0"  
  20.    timeToLiveSeconds="300"  
  21.    memoryStoreEvictionPolicy="LRU" />  
  22.   
  23. </ehcache>  

DAO层缓存:例如下边这个方法的返回值需要缓存: 

 

@SuppressWarnings("unchecked") 
//spring 3 基于注解ehcache缓存配置; 
@Cacheable(cacheName="departCache") 
public List<AppDepart> getChildDepart(Integer id) throws Exception { 
  return  this.getHibernateTemplate().find("from AppDepart  where state=1 and idParent="+id); 
@Cacheable(cacheName="departCache") 加上这句话,其中cacheName 对应ehcache.xml  中的<cache name="departCache" 
这样这个方法返回值就可以被缓存起来的了,但是怎么样把缓存数据和数据库中的数据实现同步呢? 
如果对这个PO做update ,save,delete 可以实现这样策略如下: 
@Transactional(propagation = Propagation.REQUIRED) 
//设定spring的ecache缓存策略,当编辑机构时候,把缓存全部清除掉,以达到缓存那数据同步; 
@TriggersRemove(cacheName="departCache",removeAll=true) 
public boolean editDepart(String depno, String depName) { 
  boolean flag = false; 
  try { 
   AppDepart depart = departDao.getAppdepart(depno); 
   depart.setDepName(depName); 
   departDao.update(depart); 
   flag = true; 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
  return flag; 
好了到此配置完毕,但是更加详细缓存配置策略需要研究(例如:当update数据时候,不全部清掉缓存,就可以达到与数据库同步效果) 

 

 

使用 @Cacheable

publicinterfaceWeatherDao{
        publicWeather getWeather(String zipCode);        publicList
findLocations(String locationSearch);}publicclassDefaultWeatherDaoimplementsWeatherDao{
        @Cacheable(cacheName="weatherCache")    publicWeather getWeather(String zipCode){
        //Some Code    }        @Cacheable(cacheName="locationSearchCache")    publicList
findLocations(String locationSearch){
        //Some Code    }}
 
 
    
    
    
    
    
    

表1. <ehcache:annotation-driven/> 设置

Attribute Default Description
cache-manager cacheManager The bean name of the CacheManager that is to be used to drive caching. This attribute is not required, and only needs to be specified explicitly if the bean name of the desired CacheManager is not 'cacheManager'.
create-missing-caches false Should cache names from @Cacheable annotations that don't exist in the CacheManager be created based on the default cache or should an exception be thrown?
default-cache-key-generator Not Set Default CacheKeyGenerator implementation to use. If not specified HashCodeCacheKeyGenerator will be used as the default.
self-populating-cache-scope shared Are the SelfPopulatingCache wrappers scoped to the method or are they shared among all methods using each self populating cache.
proxy-target-class false Applies to proxy mode only. Controls what type of caching proxies are created for classes annotated with the@Cacheable annotation. If the proxy-target-class attribute is set to true, then class-based proxies are created. If proxy-target-class is false or if the attribute is omitted, then standard JDK interface-based proxies are created. (See  for a detailed examination of the different proxy types.)
order Ordered.LOWEST_PRECEDENCE Defines the order of the caching advice that is applied to beans annotated with @Cacheable. (For more information about the rules related to ordering of AOP advice, see .) No specified ordering means that the AOP subsystem determines the order of the advice.

@Cacheable设置

Property Type Description
cacheName String Required name of the cache to use
selfPopulating boolean Optional if the method should have self-populating semantics. This results in calls to the annotated method to be made within a EhCache CacheEntryFactory. This is useful for expensive shared resources that should be retrieved a minimal number of times.
keyGenerator Optional inline configuration of a CacheKeyGenerator to use for generating cache keys for this method.
keyGeneratorName String Optional bean name of a CacheKeyGenerator to use for generating cache keys for this method.
exceptionCacheName String Optional name of the cache to use for caching exceptions. If not specified exceptions result in nothing being cached. If specified the thrown exception is stored in the cache for the generated key and re-thrown for subsequent method calls as long as it remains in the exception cache.

转载于:https://www.cnblogs.com/scwanglijun/p/3760177.html

你可能感兴趣的文章
Git/Bitbucket Workflow
查看>>
pygame学习资料
查看>>
6.上传前图片预览
查看>>
腾讯云:搭建 Node.js 环境
查看>>
status 返回当前请求的http状态码
查看>>
Docker基本操作
查看>>
向值栈放数据
查看>>
List集合(有序单列集合)
查看>>
初识跨终端Web
查看>>
CountDownTimer完整具体演示样例
查看>>
ubuntu删除g2o
查看>>
ThreadLocal的认知与见解
查看>>
利用Google Map API获取给定地址的经纬度
查看>>
iOS 8个实用小技巧(总有你不知道的和你会用到的)
查看>>
python的内存管理机制
查看>>
认识电脑硬件
查看>>
[转]GREP for Windows
查看>>
Javascript:看 Javascript 规范,学 this 引用,你会懂的。
查看>>
Problem B: 调用函数,求1!+2!+3!+......+10!
查看>>
WeinView 与 MITSUBISHI FX 系列 PLC 通讯范例
查看>>