`

spring ehcache配置以及使用(afterPropertiesSet)

 
阅读更多
spring 配置ehcache例子:http://blog.csdn.net/linfanhehe/article/details/7693091 
  主要特性
     1. 快速.
     2. 简单.
     3. 多种缓存策略
     4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
     5. 缓存数据会在虚拟机重启的过程中写入磁盘
     6. 可以通过RMI、可插入API等方式进行分布式缓存
     7. 具有缓存和缓存管理器的侦听接口
     8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
     9. 提供Hibernate的缓存实现

举例说明:timeToLiveSeconds =3600 timeToIdleSeconds =300

以上配置代表缓存有效时间为3600秒(自缓存建立起一个小时有效 ),在有效的一个小时内,如果连续五分钟未访问缓存,则缓存失效,特别说明的是,就算缓存访问从未间断,到一个小时后,缓存也会失效

<!--                                 配置 ehcache                              -->
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
        <property name="configLocation">  
            <value>classpath:ehcache.xml</value>  
        </property>  
	</bean>
    <!-- cacheName ehcache配置文件中的名称 -->  
	<bean id="mmsCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">  
        <property name="cacheManager" ref="cacheManager" />  
        <property name="cacheName" value="mmsCache" />  
    </bean>
    
	<bean id="dataProviderService" class="xxx.DataProviderServiceImpl">
		<property name="commonDao">
			<ref bean="commonDao" />
		</property>
		<property name="cache" ref="mmsCache"></property>
	</bean>		



<ehcache updateCheck="false" name="mmsCache">

    <defaultCache 
    		maxElementsInMemory="10000" 
    		eternal="true"
    		overflowToDisk="true">
    </defaultCache>

    <cache name="mmsCache" 
    		maxElementsInMemory="10000" 
    		eternal="true"
			overflowToDisk="false">
    </cache>
    
</ehcache>



import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.DataAccessException;

import xxx.dao.cfg.CommonDao;
import xxx.service.cfg.DataProviderService;


public class DataProviderServiceImpl implements DataProviderService,InitializingBean{
	private static final Log log = LogFactory.getLog(DataProviderServiceImpl.class);
	private  net.sf.ehcache.Cache cache;
	private CommonDao commonDao;
	
	public Cache getCache() {
		return cache;
	}
	public void setCache(Cache cache) {
		this.cache = cache;
	}
	public CommonDao getCommonDao() {
		return commonDao;
	}

	public void setCommonDao(CommonDao commonDao) {
		this.commonDao = commonDao;
	}
	/**
	 * InitializingBean 仅仅提供了初始化的方法
	 */
	@Override
	public void afterPropertiesSet() throws Exception {
		doCacheMenu();
		doCacheUser();
		doCacheDeth();
	}
	private void doCacheMenu() {
		String sql = "" ;
		// 查询所有开启的菜单
		try {
			this.put("TMENU", this.commonDao.findNativeSQL(sql,new Object[]{"1","0"}));
			log.info("缓存菜单成功!");
		} catch (Exception e) {
			e.printStackTrace();
			log.info("缓存菜单失败!");
		}
	}
	private void doCacheUser() {
		// 查询所有用户
		try {
			this.put("TUSER", this.commonDao.find("from Tuscuser t"));
			log.info("缓存用户成功!");
		} catch (DataAccessException e) {
			e.printStackTrace();
			log.info("缓存用户失败!");
		}
	}
	private void doCacheDeth(){
		// 查询所有部门
		try {
			this.put("TDEPT", this.commonDao.find("from Tuscdept t"));
			log.info("缓存部门成功!");
		} catch (DataAccessException e) {
			e.printStackTrace();
			log.info("缓存部门失败!");
		}
	}
	
	public Object get(String key) {
		return cache.get(key)!=null?cache.get(key).getObjectValue():key ;
	}
	public void put(String key, Object value) {
		cache.put(new Element(key,value));
	}
	public void reloadAllCache() {
		cache.flush();
	}
	public void reloadCacheByType(String type) {
		// 缓存菜单
		if("TMENU".equals(type)){
			doCacheMenu();
		}
		// 刷新用户
		if("TUSER".equals(type)){
			doCacheUser();
		}
		// 刷新部门
		if("TDEPT".equals(type)){
			doCacheDeth();
		}
	}
}





<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 
<!--timeToIdleSeconds 当缓存闲置n秒后销毁 --> 
<!--timeToLiveSeconds 当缓存存活n秒后销毁 --> 
<!-- 
缓存配置 
       name:缓存名称。 
       maxElementsInMemory:缓存最大个数。 
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。 
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。 
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。 
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 
       maxElementsOnDisk:硬盘最大缓存个数。 
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. 
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。 
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。 
       clearOnFlush:内存数量最大时是否清除。 
-->
<diskStore path="java.io.tmpdir" />   
<defaultCache   
  maxElementsInMemory="500"   
  eternal="false"   
  timeToIdleSeconds="300"   
  timeToLiveSeconds="1200"   
  overflowToDisk="true" />   
 <cache name="com.Menu" maxElementsInMemory="150" 
        eternal="false" timeToLiveSeconds="36000" 
        timeToIdleSeconds="3600" overflowToDisk="true"/>   
</ehcache>  


EhcacheUtil工具类使用


public class EhcacheUtil {  
  
    private static final String path = "/ehcache.xml";  
  
    private URL url;  
  
    private CacheManager manager;  
  
    private static EhcacheUtil ehCache;  
  
    private EhcacheUtil(String path) {  
        url = getClass().getResource(path);  
        manager = CacheManager.create(url);  
    }  
  
    public static EhcacheUtil getInstance() {  
        if (ehCache== null) {  
            ehCache= new EhcacheUtil(path);  
        }  
        return ehCache;  
    }  
  
    public void put(String cacheName, String key, Object value) {  
        Cache cache = manager.getCache(cacheName);  
        Element element = new Element(key, value);  
        cache.put(element);  
    }  
  
    public Object get(String cacheName, String key) {  
 // 通过名称获取cache  cacheName在ehcache.xml上定义
        Cache cache = manager.getCache(cacheName);  
        Element element = cache.get(key);  
        return element == null ? null : element.getObjectValue();  
    }  
  
    public Cache get(String cacheName) {  
        return manager.getCache(cacheName);  
    }  
  
    public void remove(String cacheName, String key) {  
        Cache cache = manager.getCache(cacheName);  
        cache.remove(key);  
    }  
  
}  


单独使用ehcache

//从classes目录查找ehcache.xml配置文件  
CacheManager cacheManager = CacheManager.getInstance();  
  
//从classes目录查找指定名称的配置文件  
//CacheManager cacheManager = CacheManager.create(getClass().getResource("/ehcache.xml"));  
  
//根据配置文件获得Cache实例  
Cache cache = cacheManager.getCache("CACHE1");  
  
//清空Cache中的所有元素  
cache.removeAll();  
  
//往Cache中添加元素  
cache.put(new Element("s1", "11111"));  
cache.put(new Element("s2", "22222"));  
cache.put(new Element("s3", "33333"));  
  
//从Cache中取得元素  
Element e = cache.get("s3");  
System.out.println(e.getValue());  
  
//卸载缓存管理器  
cacheManager.shutdown();  


页面缓存

在web.xml文件中配置过滤器。此处对test_tag.jsp页面进行缓存。

<filter>   
    <filter-name>testPageCachingFilter</filter-name>   
    <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>   
</filter>  
<filter-mapping>   
    <filter-name>testPageCachingFilter</filter-name>   
    <url-pattern>/test_tag.jsp</url-pattern>  
</filter-mapping>  


在ehcache.xml文件中配置Cache节点。
注意:cache的name属性必需为SimplePageCachingFilter。

<cache name="SimplePageCachingFilter"   
   maxElementsInMemory="10"   
   overflowToDisk="true"   
   eternal="false"   
   timeToIdleSeconds="100"   
   timeToLiveSeconds="100"  
   memoryStoreEvictionPolicy="LFU" />  



分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring 使用注解配置使用ehcache

    本文将深入探讨如何在Spring中使用注解来配置Ehcache。 首先,我们需要在项目中引入Ehcache的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;net.sf.ehcache&lt;/groupId&gt; ...

    Spring+Ehcache集成

    本篇文章将详细介绍如何在Spring项目中集成Ehcache,以及如何通过Spring的AOP(面向切面编程)实现方法级别的缓存注解。 首先,我们需要在项目中引入Ehcache的依赖。通常,这可以通过在`pom.xml`文件中添加Maven...

    Ehcache集成Spring的使用(转载)

    这篇博客将深入探讨如何将 Ehcache 集成到 Spring 应用中,以及如何使用 Spring AOP 实现计算结果的缓存。 首先,集成 Ehcache 到 Spring 需要以下步骤: 1. **引入依赖**: 在 Maven 或 Gradle 的配置文件中添加 ...

    Spring与ehcache结合使用

    通过合理的配置,ehcache能够有效地管理和控制数据缓存的时间、大小以及策略等。 #### 三、Spring与ehcache结合使用步骤详解 ##### 3.1 配置ehcache.xml文件 在开始之前,首先需要配置ehcache的XML文件。这是一个...

    Spring Boot 2.x基础教程:使用EhCache缓存集群.docx

    最后,启动多个应用实例,每个实例都会使用其对应的EhCache配置,并通过配置的网络信息与其他实例建立连接,形成缓存集群。这样,当在一个实例中更新缓存时,更新会被广播到其他实例,确保所有节点上的缓存保持一致...

    ehcache配置使用详解

    ### ehcache配置使用详解 #### 一、ehcache概述与特性 **背景介绍:** 缓存作为提升系统响应速度和降低数据库压力的关键技术,在现代软件架构中占据着重要位置。ehcache,作为一款高性能的开源Java缓存框架,旨在...

    spring+ehcache

    - 配置Spring:在Spring配置文件中启用缓存管理器,并指定使用Ehcache。 - 使用注解:在需要缓存的方法上添加`@Cacheable`、`@CacheEvict`等注解。 **二、Spring Cache注解** 1. **@Cacheable** 此注解用于标记...

    Ehcache 整合Spring 使用页面、对象缓存

    - **与Spring、Hibernate的集成**:Ehcache可以非常容易地与Spring和Hibernate框架集成,简化缓存的配置和使用。 #### 二、准备工作 在开始使用Ehcache之前,需要先完成以下准备工作: 1. **下载JAR包**: - **...

    spring整合ehCache

    这通常通过Maven或Gradle的配置文件完成,添加对应的EhCache和Spring支持EhCache的依赖库。例如,如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;net.sf.ehcache&lt;/groupId&gt; &lt;artifactId&gt;...

    spring + ehcache + redis两级缓存

    在Spring中,我们可以配置Ehcache作为缓存 provider,通过注解或XML配置来启用和管理缓存。 **Redis** 是一个高性能的键值数据库,常被用作分布式缓存系统。相比于Ehcache,Redis支持更丰富的数据结构(如字符串、...

    spring2.5整合ehcache2.0使用

    Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,使得我们可以在不修改核心业务代码的情况下轻松地添加缓存功能。 首先,我们需要在项目中引入Ehcache和Spring的相关依赖...

    ehcache的配置参数详解

    ehcache是一种广泛使用的Java缓存框架,用于提高应用程序性能,特别是在数据访问操作中。通过将数据存储在内存中,ehcache能够显著减少数据库查询次数,从而加快应用响应速度。本文将深入探讨ehcache.xml配置文件中...

    spring3整合EhCache注解实例

    spring3整合EhCache注解实例

    spring+ehcache demo

    以下我们将详细探讨如何配置和使用Spring与Ehcache的整合。 1. **配置Ehcache** 首先,我们需要在项目中引入Ehcache的依赖。在Maven项目中,可以在`pom.xml`中添加以下依赖: ```xml &lt;groupId&gt;org.ehcache ...

    Spring4 整合EhCache实现 页面缓存 零配置

    在本文中,我们将深入探讨如何使用Spring4框架与EhCache进行整合,以实现零配置的页面缓存功能。EhCache是一个广泛使用的开源Java缓存解决方案,它提供了高效的内存和磁盘缓存机制,有助于提升应用程序性能。通过...

    spring3.2+ehcache 注解使用

    在本文中,我们将深入探讨如何在Spring 3.2框架中使用Ehcache注解进行缓存管理。Ehcache是一种流行的Java缓存解决方案,它能够显著提高应用程序的性能,尤其是在处理频繁读取但更新不频繁的数据时。Spring 3.2引入了...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...

    Ehcache整合Spring使用页面、对象缓存

    3. 配置Spring:在Spring的配置文件中启用缓存支持,并指定Ehcache为缓存管理器。 ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

    spring+ehcache示例整合Demo

    Ehcache通常使用的是`org.ehcache:ehcache`库,而Spring的相关依赖可能包括`spring-context`和`spring-context-support`,以支持缓存管理。 ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context ...

    spring集成ehcache所需的jar包

    spring集成ehcache所需的jar包

Global site tag (gtag.js) - Google Analytics