spring 缓存,不能对方法进行缓存

问题描述

如题配置文件XMLcode<!--缓存管理--><beanid="defaultCacheManager"class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><propertyname="configLocation"><value>ehcache.xml</value></property></bean><!--定义ehCache的工厂,并设置所使用的Cachename--><beanid="ehCache"class="org.springframework.cache.ehcache.EhCacheFactoryBean"><propertyname="cacheManager"><reflocal="defaultCacheManager"/></property><propertyname="cacheName"><value>DEFAULT_CACHE</value></property></bean><beanid="methodCacheInterceptor"class="com.longtuo.server.util.MethodCacheInterceptor"><propertyname="cache"><reflocal="ehCache"/></property></bean><beanid="methodCacheAfterAdvice"class="com.longtuo.server.util.MethodCacheAfterAdvice"><propertyname="cache"><reflocal="ehCache"/></property></bean><beanid="methodCachePointCut"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><propertyname="advice"><reflocal="methodCacheInterceptor"/></property><propertyname="patterns"><list><value>.*query.*</value><value>.*get.*</value></list></property></bean><beanid="methodCachePointCutAdvice"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><propertyname="advice"><reflocal="methodCacheAfterAdvice"/></property><propertyname="patterns"><list><value>.*create.*</value><value>.*update.*</value><value>.*delete.*</value></list></property></bean><beanid="couponServices"class="org.springframework.aop.framework.ProxyFactoryBean"><propertyname="target"><reflocal="couponDao"/></property><propertyname="interceptorNames"><list><value>methodCachePointCut</value><value>methodCachePointCutAdvice</value></list></property></bean>MethodCacheInterceptor类文件Javacodepackagecom.longtuo.server.util;importjava.io.Serializable;importnet.sf.ehcache.Cache;importnet.sf.ehcache.Element;importorg.aopalliance.intercept.MethodInterceptor;importorg.aopalliance.intercept.MethodInvocation;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.util.Assert;publicclassMethodCacheInterceptorimplementsMethodInterceptor,InitializingBean{privatestaticfinalLoglogger=LogFactory.getLog(MethodCacheInterceptor.class);privateCachecache;publicvoidsetCache(Cachecache){this.cache=cache;}publicMethodCacheInterceptor(){super();}/***拦截Service/DAO的方法,并查找该结果是否存在,如果存在就返回cache中的值,否则,返回数据库查询结果,并将查询结果放入cache*/publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{StringtargetName=invocation.getThis().getClass().getName();StringmethodName=invocation.getMethod().getName();Object[]arguments=invocation.getArguments();Objectresult;logger.debug("Findobjectfromcacheis"+cache.getName());StringcacheKey=getCacheKey(targetName,methodName,arguments);Elementelement=cache.get(cacheKey);if(element==null){logger.debug("Holdupmethod,Getmethodresultandcreatecache........!");result=invocation.proceed();element=newElement(cacheKey,(Serializable)result);cache.put(element);}returnelement.getValue();}/***获得cachekey的方法,cachekey是Cache中一个Element的唯一标识cachekey包括*包名+类名+方法名,如com.co.cache.service.UserServiceImpl.getAllUser*/privateStringgetCacheKey(StringtargetName,StringmethodName,Object[]arguments){StringBuffersb=newStringBuffer();sb.append(targetName).append(".").append(methodName);if((arguments!=null)&&(arguments.length!=0)){for(inti=0;i<arguments.length;i++){sb.append(".").append(arguments[i]);}}returnsb.toString();}/***implementInitializingBean,检查cache是否为空*/publicvoidafterPropertiesSet()throwsException{Assert.notNull(cache,"Needacache.PleaseusesetCache(Cache)createit.");}}为什么不能对dao的query方法缓存

时间: 2024-11-08 19:25:24

spring 缓存,不能对方法进行缓存的相关文章

Spring Boot使用redis做数据缓存

1 添加redis支持 在pom.xml中添加 Xml代码   <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-redis</artifactId>         </dependency>     2 redis配置 Java代码   package co

java中利用spring cache解耦业务中的缓存

虽然以前实现缓存的方式,是定义了缓存操作接口,可以灵活实现不同的缓存,可毕竟精力有限,要完成不同的缓存实现也是件麻烦的事.更要命的是,业务代码中有大量缓存操作的代码,耦合度太高,看着很不优雅. 所以呢,抽空了解了一下其它实现方案.这不,spring3.1开始,支持基于注解的缓存,算是目前我比较可以接受的一种方案吧.学完之后还是做一下笔记吧. spring cache是一套基于注解实现的缓存技术,其本身是并不是具体实现,不过默认实现了ConcurrentMap和EHCache实现的缓存.当然也是支

关于页面缓存清除的方法小结(整理)

缓存|页面      每次上Chinaasp总有不少的网友问及如何使Asp页面刷新,在IIS4的管理下页面的不刷新问题较IIS5严重得多,而且有时确实加入一些控制页面缓存的语句还是不起什么作用.原因我也不是很清楚,去问问微软吧:-)现在我将清除页面缓存的一些方法总结如下:1.在Asp页面首部加入Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl

关于页面缓存清除的方法小结

缓存|页面 每次上Chinaasp总有不少的网友问及如何使Asp页面刷新,在IIS4的管理下页面的不刷新问题较IIS5严重得多,而且有时确实加入一些控制页面缓存的语句还是不起什么作用.原因我也不是很清楚,去问问微软吧:-)现在我将清除页面缓存的一些方法总结如下:1.在Asp页面首部加入Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "n

ASP关于页面缓存清除的方法小结

 每次上Chinaasp总有不少的网友问及如何使Asp页面刷新,在IIS4的管理下页面的不刷新问题较IIS5严重得多,而且有时确实加入一些控制页面缓存的语句还是不起什么作用.原因我也不是很清楚,去问问微软吧:-) 现在我将清除页面缓存的一些方法总结如下: 1.在Asp页面首部加入 Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-

PHP文件生成的图片无法使用CDN缓存的解决方法

  这篇文章主要介绍了PHP文件生成的图片无法使用CDN缓存的解决方法,这里的PHP生成图片是指src地址是一个PHP文件的图片,如果不做CDN,服务器的压力会非常大,本文就讲解了如何加进CDN的方法,需要的朋友可以参考下 今天发现线上有个问题,线上一个图片域名,在前端已经加了CDN缓存,不落缓存,则用PHP动态实现图片缩放,但经PHP处理过的图片输出后,每次都要从后端读取,后端服务器压力瞬间增加,经分析,PHP中没有作304的处理, HTTP的原理是这样的,每次请求到服务器后,服务端检测有没有

缓存文件目录修改方法

  缓存文件目录修改方法 Win7系统相信大家已经用得十分纯熟了,不过也有些不明白之处,像有些用户会问一些关于更改路径这样的问题,这些问题并不难,接下来大家一起学习以下问题吧. 问:我一直很喜欢用Chrome浏览器,但安装时不能指定安装目录,其缓存文件也在系统分区,我将电脑的内存划了一部分做成虚拟硬盘,想更改Chrome缓存文件的位置,却找不到在哪里更改,在Chrome的首选项中也没找到!要怎么修改呢?我的电脑是Windows 7系统. 答:在Windows7下可以用mklink命令把缓存位置链

ajax的get请求时缓存处理解决方法_AJAX相关

本文实例讲述了ajax的get请求时缓存处理解决方法.分享给大家供大家参考.具体分析如下: 很多时候在Ajax的get方法调用的时候由于缓存的原因无法及时获取正确的数据,这里就来分析一下解决这一问题的方法: 1. 在url后面添加一个随机数,如: 复制代码 代码如下: http://www.test.com?a=a&b=b&r=Math.random(); 2. 在url后面添加时间戳: 复制代码 代码如下: var t = new Date().getTime(); http://www

php禁止浏览器使用缓存页面的方法_php技巧

本文实例讲述了php禁止浏览器使用缓存页面的方法.分享给大家供大家参考.具体方法如下: 页面缓存在有的时候是不需要的,我们可以禁止浏览器缓存页面. 在PHP中可以轻松的使用下面的语句实现禁止页面缓存,但比较难记特整理下,方便大家使用. php代码如下: 复制代码 代码如下: <?php // 设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可. header ( " Expires: Mon, 26 Jul 1970 05:00:00 GMT " );  //

CI框架数据库查询缓存优化的方法_php实例

本文实例讲述了CI框架数据库查询缓存优化的方法.分享给大家供大家参考,具体如下: CI框架中有个比较好的查询优化,就是数据库缓存优化 1.开启缓存 //在application/config.php中开启 $db['default']['cache_on'] = TRUE; //在application/config.php中开启 $db['default']['cachedir'] = './cache'; //并在对应的目录中加一个可写缓存目录cache 2. 在对应的查询中开启缓存语句 /