Spring4 Cache + Ehcache配置
从Spring 3.1之后 引入了基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果来定义缓存的 key 和各种 condition,还提供开箱即用的缓存临时存储方案,也支持和主流的专业缓存
例如 EHCache 集成其特点总结如下:
通过少量的配置 annotation 注释即可使得既有代码支持缓存支持开箱即用 Out-Of-The-Box,即不用安装和部署额外第三方组件即可使用缓存
支持 SpringEL,能使用对象的任何属性或者方法来定义缓存的 key 和 condition支持 AspectJ,并通过其实现任何方法的缓存支持支持自定义 key 和自定义缓存管理者,具有相当的灵活性和扩展性
首先我们需要配置ehcache.xml
配置如下:
<ehcache> <diskStore path="java.io.tmpdir"/> <!-- 配置自定义缓存 maxElementsInMemory:缓存中允许创建的最大对象数 eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。 timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前, 两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效, 如果该值是 0 就意味着元素可以停顿无穷长的时间。 timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值, 这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。 overflowToDisk:内存不足时,是否启用磁盘缓存。 memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。 --> <defaultCache maxElementsInMemory="5000" eternal="true" overflowToDisk="false" memoryStoreEvictionPolicy="LFU"/> <!-- 用户cache --> <cache name="user_Cache" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="1000" timeToLiveSeconds="18000" overflowToDisk="false" memoryStoreEvictionPolicy="LFU"/> </ehcache>
然后我们需要在sping配置文件中增加cacheManager配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
<!--配置spring自动拦截带cache注解的注解方法-->
<cache:annotation-driven />
<!--配置cache管理工厂-->
<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:resources/ehcache.xml" p:shared="false"/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="cacheManagerFactory"/>
<!-- generic cache manager
使用spring自带的多线程map集合,如果不适用ecache等缓存软件的,可以适用这个
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="user_Cache"/>
</set>
</property>
</bean>
-->
</beans>
接着,我们就可以在serviceImpl中需要的方法上添加@CacheEvict @Cacheable @Caching
其中
@CacheEvict 是在调用方法时删除某一个缓存,可以指定 beforeInvocation = true,在方法调用前删除,默认为调用后删除
参数: value 指定缓存的cache名字,可以指定多个,key是缓存中key的名字,beforeInvocation 是否在执行前删除缓存,默认为false,allEntries 为是否清楚cacha中所有的缓存
@Cacheable 是指定当前方法需要缓存结果
参数: value 指定缓存的cacha名字,可以指定多个, key为缓存的key名字,默认为hash,不过在我使用过程中发现有时候不指定,返回的cache有时候会是其他缓存的结果,我一直都设置.也比较简单.
key执行springEL.设置如下:
比如下面方法
@Cacheable(value="user_Cache",key=" 'findForList' + #userid+ '_' + #pwd ")
findForList(String userid,String pwd)
如果参数为对象,可以按照如下设置,比如TmUser中有userid
@Cacheable(value="user_Cache",key=" 'findForList' + #user.userid")
findForList(TmUser user)
如果我们想使用Hash来做key,首先需要自己做一个方法比如:com.common.util.HashUtil,里面有一个方法hash(Object obj)
@Cacheable(value="user_Cache",key=" 'findForList'+T(com.common.util.HashUtil).hash(#user)")
findForList(TmUser user)
@Caching 此方法可以一次指定多个cache和evict,即,在调用方法时缓存多个对象和除去多个对象.
配置如下:
@Caching(cacheable={@Cacheable(value="a_Cache"),@Cacheable(value="b_Cache")},evict={@CacheEvict(value="a_cache",key="a"),@CacheEvict(value="b_cache",key="b")})
将spring的配置文件在web.xml中加载,添加ehcache相关jar包,即可发现缓存已生效
注:如果在Action或Controller中控制cache,可以通过注入EhCacheCacheManager对象,id为前面标红的ID
通过 cacheManager.getCache(cacheName)获得对应Cache
通过 cache.get(缓存的key, 缓存的对象类型)得到对应的对象.
通过 cache.put(要缓存的key,要缓存的对象)来缓存对象
相关推荐
在缓存管理方面,Spring 提供了 Spring Cache抽象层,可以方便地集成各种缓存实现,如Ehcache、Hazelcast或Redis。 **Ehcache** 是一个广泛使用的Java缓存库,适合在内存中存储数据。它提供了一种快速访问最近使用...
1. **Spring配置**:Spring的配置文件(如`applicationContext.xml`)会定义bean,包括数据源、SessionFactory(Hibernate)、缓存管理器(Ehcache)以及业务层和服务层的组件。通过依赖注入,Spring将这些组件装配...
Ehcache可以很好地与Spring集成,通过简单的配置即可实现缓存管理。 在整合这些技术时,首先需要在Spring的配置文件中定义bean,包括数据源、SqlSessionFactory(Mybatis的核心)、MapperScannerConfigurer(扫描...
在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"hibernate4+spring4+springmvc+ehcache+自己写的cache系统"是一个常见的技术栈,用于实现这样的目标。这个组合提供了完整的数据持久化、服务层管理、前端...
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="ehcache"/> <bean id="ehcache" class="org.ehcache.core.EhcacheManager"> ...
然后,在Spring的主配置文件中,如`applicationContext.xml`,我们需要导入Ehcache的配置,并声明一个EhcacheManager: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache....
总结,这个"spring+ehcache demo"是一个全面的示例,涵盖了从引入Ehcache依赖、配置Spring Cache到编写缓存注解的方法。通过学习和实践这个示例,开发者可以深入了解Spring与Ehcache的集成,以及如何利用缓存提升...
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> ``` 在这里,`ehcache.xml`是Ehcache的配置...
在这里,我们通过`setCache(Cache cache)`方法注入缓存实例,这通常是由Spring配置文件中配置的bean注入。Spring对ehCache的支持使得集成更加简便,我们可以利用Spring的缓存抽象来管理ehCache实例,包括设置缓存...
3. **Spring配置**:在Spring的配置文件(如applicationContext.xml)中启用Ehcache支持,并加载上面的ehcache.xml配置。例如: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache....
本文将深入探讨Spring如何与EhCache协同工作,以及如何在实际项目中实施和配置。 **1. EhCache简介** EhCache是Java的一个开源、高性能、可扩展的缓存库,它支持内存和磁盘存储,可以进行分布式缓存。EhCache提供...
本文将深入探讨如何在Spring框架中通过注解方式配置Ehcache,以便优化应用程序的性能。 首先,让我们理解Spring与Ehcache结合的基本概念。Ehcache是一个内存缓存系统,它可以存储数据到内存中,从而减少数据库的...
Hibernate+EhCache 配置及使用说明详解 EhCache 是 Hibernate 的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 EhCache 的使用注意点: ...
配置Ehcache,我们可以在Spring的配置文件中定义一个`CacheManager` bean,指定Ehcache的配置文件路径。Ehcache的配置文件(如ehcache.xml)包含了缓存的命名空间、大小限制、过期策略等信息。例如: ```xml ...
3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,添加Ehcache的bean配置,以使Spring能够管理Ehcache: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache....
Spring Boot 是基于 Spring 框架的快速开发工具,它通过自动配置、起步依赖和内嵌服务器简化了创建独立、生产就绪的 Java 应用程序的过程。Spring Boot 遵循“约定优于配置”的原则,使得开发者可以快速搭建项目并...
3. **启用Spring Cache**:在Spring配置中启用Spring的缓存抽象,例如: ```xml <cache:annotation-driven cache-manager="cacheManager"/> ``` 4. **使用注解**:在需要缓存的方法上添加`@Cacheable`注解,...
1.标题所提及技术的整合,Spring包括mvc、aop、ioc等。个人属于强迫症类型,技术水平怎么样再说,代码必须好看 2.Hibernate几个级别缓存对比。见DaoImpl类 3.Ehcache方法缓存及页面缓存。见applicationContext-cache...