- 浏览: 1501433 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
在Spring中通过EHCache实现缓存,必须手动缓存或者通过AOP进行缓存实现。通过采用SpringModules进行缓存是EHCache不必进行自动缓存,由SpringMoudles提供拦截器实现,简化开发的。实现如下:
1.EHCache的配置如下:
- <ehcache>
- <diskStore path="java.io.tmpdir" />
- <defaultCache maxElementsInMemory="10000" eternal="false"
- timeToIdleSeconds="2" timeToLiveSeconds="5" overflowToDisk="true"
- maxElementsOnDisk="10000000" diskPersistent="false"
- diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />
- <cache name="testCache" maxElementsInMemory="10000"
- maxElementsOnDisk="1000" eternal="false" overflowToDisk="false"
- diskSpoolBufferSizeMB="20" timeToIdleSeconds="60" timeToLiveSeconds="3600"
- memoryStoreEvictionPolicy="LFU" />
- </ehcache>
<ehcache>
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="2" timeToLiveSeconds="5" overflowToDisk="true"
maxElementsOnDisk="10000000" diskPersistent="false"
diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />
<cache name="testCache" maxElementsInMemory="10000"
maxElementsOnDisk="1000" eternal="false" overflowToDisk="false"
diskSpoolBufferSizeMB="20" timeToIdleSeconds="60" timeToLiveSeconds="3600"
memoryStoreEvictionPolicy="LFU" />
</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"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <!-- Using a EHCache cache manager -->
- <bean id="cacheManager"
- class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
- <!--EHCache cacheManager
- <property name="cacheManagerName" value="mainCache"/>
- -->
- <property name="configLocation" value="classpath:ehcache.xml" />
- </bean>
- <!-- 使用Spring Modules对 EhCache的封装 -->
- <bean id="cacheProviderFacade" class="<SPAN style="COLOR: #ff0000">org.springmodules.cache.provider.ehcache.EhCacheFacade</SPAN>">
- <property name="cacheManager" ref="cacheManager" />
- </bean>
- <!-- 配置 方法 拦截器 -->
- <!-- 缓存拦截器 -->
- <bean id="cachingInterceptor"
- class="<SPAN style="COLOR: #ff0000">org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor</SPAN>">
- <property name="cacheProviderFacade" ref="cacheProviderFacade" />
- <property name="cachingModels">
- <!-- 进行cache缓存 -->
- <props>
- <!-- 所有TicketService对象中,以get开头的方法都将进行缓存 -->
- <prop key="com.easyway.ecache.service.TicketService.get*">cacheName=testCache</prop>
- </props>
- </property>
- </bean>
- <!-- 缓存刷新拦截器 -->
- <bean id="flushingInterceptor"
- class="<SPAN style="COLOR: #99cc00">org.springmodules.cache.interceptor.flush.MethodMapFlushingInterceptor</SPAN>">
- <property name="cacheProviderFacade" ref="cacheProviderFacade" />
- <property name="flushingModels">
- <!-- 进行cache刷新(清除) -->
- <props>
- <prop key="com.easyway.ecache.service.TicketService.set*">cacheNames=testCache</prop>
- </props>
- </property>
- </bean>
- <!-- 相关的服务 -->
- <bean id="ticketService" class="com.easyway.ecache.service.TicketService"></bean>
- <!-- 配置 基于BeanName规则的动态代理封装 -->
- <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
- <!-- 设置拦截的bean名称 -->
- <property name="beanNames">
- <list>
- <value>ticketService</value>
- </list>
- </property>
- <!-- 设置拦截器的名称 -->
- <property name="interceptorNames">
- <list>
- <value>cachingInterceptor</value>
- <value>flushingInterceptor</value>
- </list>
- </property>
- </bean>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- Using a EHCache cache manager -->
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<!--EHCache cacheManager
<property name="cacheManagerName" value="mainCache"/>
-->
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
<!-- 使用Spring Modules对 EhCache的封装 -->
<bean id="cacheProviderFacade" class="org.springmodules.cache.provider.ehcache.EhCacheFacade">
<property name="cacheManager" ref="cacheManager" />
</bean>
<!-- 配置 方法 拦截器 -->
<!-- 缓存拦截器 -->
<bean id="cachingInterceptor"
class="org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor">
<property name="cacheProviderFacade" ref="cacheProviderFacade" />
<property name="cachingModels">
<!-- 进行cache缓存 -->
<props>
<!-- 所有TicketService对象中,以get开头的方法都将进行缓存 -->
<prop key="com.easyway.ecache.service.TicketService.get*">cacheName=testCache</prop>
</props>
</property>
</bean>
<!-- 缓存刷新拦截器 -->
<bean id="flushingInterceptor"
class="org.springmodules.cache.interceptor.flush.MethodMapFlushingInterceptor">
<property name="cacheProviderFacade" ref="cacheProviderFacade" />
<property name="flushingModels">
<!-- 进行cache刷新(清除) -->
<props>
<prop key="com.easyway.ecache.service.TicketService.set*">cacheNames=testCache</prop>
</props>
</property>
</bean>
<!-- 相关的服务 -->
<bean id="ticketService" class="com.easyway.ecache.service.TicketService"></bean>
<!-- 配置 基于BeanName规则的动态代理封装 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 设置拦截的bean名称 -->
<property name="beanNames">
<list>
<value>ticketService</value>
</list>
</property>
<!-- 设置拦截器的名称 -->
<property name="interceptorNames">
<list>
<value>cachingInterceptor</value>
<value>flushingInterceptor</value>
</list>
</property>
</bean>
</beans>
仔细观察可知道上面带颜色的类其实是几个采用AOP实现的拦截器而已。
3.编写测试服务类
- package com.easyway.ecache.service;
- import java.util.List;
- /**
- * 对其所有的以get* 方式命令的方法,进行缓存处理。当调用set* 命令时,需要其删除缓存
- * @author longgangbai
- *
- */
- @SuppressWarnings("unchecked")
- public class TicketService {
- /**
- * 需要缓存的集合
- */
- private List ticketList;
- /**
- * 需要缓存的服务名称
- */
- private String serviceName;
- public String getServiceName() {
- return serviceName;
- }
- public void setServiceName(String serviceName) {
- this.serviceName = serviceName;
- }
- public List getTicketList() {
- return ticketList;
- }
- public void setTicketList(List ticketList) {
- this.ticketList = ticketList;
- }
- /**
- * 修改的服务端名称备注但是不缓存
- * @param serviceName
- */
- public void changesetServiceName(String serviceName) {
- this.serviceName = serviceName;
- }
- }
package com.easyway.ecache.service;
import java.util.List;
/**
* 对其所有的以get* 方式命令的方法,进行缓存处理。当调用set* 命令时,需要其删除缓存
* @author longgangbai
*
*/
@SuppressWarnings("unchecked")
public class TicketService {
/**
* 需要缓存的集合
*/
private List ticketList;
/**
* 需要缓存的服务名称
*/
private String serviceName;
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public List getTicketList() {
return ticketList;
}
public void setTicketList(List ticketList) {
this.ticketList = ticketList;
}
/**
* 修改的服务端名称备注但是不缓存
* @param serviceName
*/
public void changesetServiceName(String serviceName) {
this.serviceName = serviceName;
}
}
4.测试用例如下
- package com.easyway.ecache.service;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- /**
- * 测试SpringModule EhCache 的整合的应用
- * @author longgangbai
- *
- */
- public class Test {
- public static void main(String[] args) {
- ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
- TicketService ticketSrv=(TicketService)ctx.getBean("ticketService");
- String srvName0=ticketSrv.getServiceName();
- //获取初始化服务端名称
- System.out.println("srvName0="+srvName0);
- //设置存储的名称
- ticketSrv.setServiceName("ticketService");
- srvName0=ticketSrv.getServiceName();
- //获取服务端名称
- System.out.println("srvName1="+srvName0);
- //修改服务名称但是不缓存
- ticketSrv.changesetServiceName("serviceName");
- srvName0=ticketSrv.getServiceName();
- //获取服务端名称来源自缓存注意观察
- System.out.println("srvName2="+srvName0);
- //
- //srvName0=null
- //srvName1=ticketService
- //srvName2=ticketService
- }
- }
package com.easyway.ecache.service;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试SpringModule EhCache 的整合的应用
* @author longgangbai
*
*/
public class Test {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
TicketService ticketSrv=(TicketService)ctx.getBean("ticketService");
String srvName0=ticketSrv.getServiceName();
//获取初始化服务端名称
System.out.println("srvName0="+srvName0);
//设置存储的名称
ticketSrv.setServiceName("ticketService");
srvName0=ticketSrv.getServiceName();
//获取服务端名称
System.out.println("srvName1="+srvName0);
//修改服务名称但是不缓存
ticketSrv.changesetServiceName("serviceName");
srvName0=ticketSrv.getServiceName();
//获取服务端名称来源自缓存注意观察
System.out.println("srvName2="+srvName0);
//
//srvName0=null
//srvName1=ticketService
//srvName2=ticketService
}
}
5.测试结果如下:
srvName0=null
srvName1=ticketService
srvName2=ticketService
6.采用的类库如下:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="src/spring.jar"/>
<classpathentry kind="lib" path="src/spring-modules-cache.jar"/>
<classpathentry kind="lib" path="src/ehcache-1.6.0-beta4.jar"/>
<classpathentry kind="lib" path="src/commons-lang.jar"/>
<classpathentry kind="lib" path="src/commons-logging.jar"/>
<classpathentry kind="lib" path="src/oro-2.0.7.jar"/>
<classpathentry kind="lib" path="src/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
发表评论
-
Spring中AOP实现EHCache的整合(一)
2011-09-07 18:07 1676在项目中使用缓存我OSCache,今天有时间将所有的EHCac ... -
OsCache MemCache EhCache
2011-08-17 15:02 2376Memcache:分布式内存对象缓存系统,占用其他机子的内存。 ... -
分布式缓存集群环境配置
2011-07-12 17:49 1558ehcache提供三种网络连接策略来实现集群,rmi,jg ... -
大型高并发高负载web应用系统架构-缓存架构策略
2011-06-21 22:52 1923目前在网站的架构构 ... -
EHCACHE简介
2010-06-25 15:31 1553二级缓存 EHCache是一个快速的、轻量级的、易于使用的、 ... -
应用OSCache提升J2EE系统运行性能
2010-06-24 16:50 1297Cache是一种用于提高系 ... -
服务器缓存
2010-06-20 23:46 1826Web缓存最权威的资料就属RFC了,可惜它太过言简意赅,本文将 ...
相关推荐
在Spring中,AOP是通过定义切面(Aspect)和通知(Advice)来实现的,切面定义了关注点的逻辑结构,而通知则定义了何时、何地以及如何执行这些逻辑。 接下来,我们引入EHCache。EHCache支持本地内存缓存、分布式...
本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java应用的运行效率。 首先,让我们了解Spring AOP。Spring AOP是Spring框架的一部分,它允许我们在不修改业务代码的情况下,通过定义...
为了在Spring中使用ehCache,我们需要添加相应的依赖,并配置Spring AOP以拦截需要缓存的方法。在Spring的配置文件中,我们可以使用`<aop:config>`和`<cache:annotation-driven>`标签来启用AOP和缓存注解支持。然后...
在"Spring+Hibernate+ehcache整合"项目中,开发者已经完成了一个将这三个框架集成的基础工程。虽然Struts没有被明确提及,但通常在Web开发中,Spring与Struts结合可以构建更完整的MVC架构。这个整合项目可能包含以下...
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
Spring AOP 和 EhCache 结合使用提供了一个简单而有效的缓存解决方案,主要目的是优化系统性能,减少对数据库的频繁访问。下面将详细解释这个解决方案的关键组成部分。 首先,EhCache 是一个广泛使用的开源 Java ...
在Spring中,Ehcache可以被集成为一个缓存提供者,通过@Cacheable、@CacheEvict等注解实现方法级别的缓存控制。这有助于提升查询效率,尤其是在处理大数据量时。 **整合过程** 1. **配置Spring** 首先,我们需要...
这篇博客“spring struts2 hibernate ehcache整合”显然探讨了如何将这四个组件集成到同一个项目中,以提升应用程序的性能和效率。以下是关于这些技术及其整合的关键知识点的详细说明: 1. **Spring框架**:Spring...
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多...在实际项目中,结合aopalliance.jar、spring-aop-4.1.6.RELEASE.jar和spring-aspects-4.1.6.RELEASE.jar,我们可以构建出高效且易于管理的系统。
赠送jar包:spring-aop-5.2.0.RELEASE.jar; 赠送原API文档:spring-aop-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-aop-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-aop-5.2.0.RELEASE.pom;...
本文将详细介绍如何在Spring3和Hibernate4环境下整合Ehcache,实现数据缓存功能,以提高应用性能。 1. **Spring3与Hibernate4整合** 在Spring3中配置Hibernate4,我们需要在配置文件中定义SessionFactory,并使用...
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
SpringMVC、Mybatis、Spring、Shiro和Ehcache这五个技术组件是Java Web开发中的关键工具,它们各自承担着不同的职责,并通过整合来实现强大的功能。下面将详细阐述这些技术以及它们在整合中的作用。 首先,...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...
在Spring中,AOP主要是通过代理模式实现的,有JDK动态代理和CGLIB两种方式。 对于Spring事务管理,我们通常有两种方式:编程式和声明式。编程式事务管理需要在代码中显式地调用begin、commit、rollback等事务控制...
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
在Spring中,这些关注点被封装为“切面”(Aspect),并在运行时通过“通知”(Advice)动态地插入到目标对象的方法执行流程中。通知有五种类型:前置通知(Before)、后置通知(After)、返回后通知(After ...