java Ehcache缓存过期配置

本文介绍了如何在Java中配置Ehcache缓存的过期,包括MyCacheEventListener类、MyCacheEventListenerFactory的实现,以及如何创建CacheEventListener。通过这些设置,可以有效地管理Ehcache缓存的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.MyCacheEventListener类

package com.seryo.cache;

import com.seryo.util.spring.SpringContextUtil;

import net.sf.ehcache.CacheException;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import net.sf.ehcache.event.CacheEventListener;
/**
 * EhcacheCache 缓存 实现配置接口
 * @Package com.seryo.cache
 * @ClassName: MyCacheEventListener
 */
public  class MyCacheEventListener implements CacheEventListener {
	
	private static MyCacheProvider provider;
	
    /**
	 * 因为启动初始化的时候spring 拿不到 Service      
	 * @param: @return      
	 * @return: MyCacheProvider      
	 * @throws
	 */
	public static MyCacheProvider getProvider(){
		if(provider == null) {
			provider = SpringContextUtil.getBean(MyCacheProvider.class);
		}
		return provider;
	}
	
	public static CacheEventListener INSTANCE = new MyCacheEventListener();
		/**
		 *  方法会在往Cache中移除单个元素时被调用,即在调用Cache的remove方法之后被调用。
		 */
	   @Override
	   public void notifyElementRemoved(Ehcache cache, Element element)  throws CacheException {
	 
	   }
	 
	   /**
		 *  方法会在往Cache中添加元素时被调用。调用Cache的put方法添加元素时会被阻塞,直到对应的notifyElementPut方法返回之后。
		 */
	   @Override
	   public void notifyElementPut(Ehcache cache, Element element) throws CacheException {
	   }
	 
	   /**
		 *  方法,当往Cache中put一个已经存在的元素时就会触发CacheEventListener的notifyElementUpdated方法,
		 *  此时put操作也会处于阻塞状态,直到notifyElementUpdated方法执行完毕。
		 */
	   @Override
	   public void notifyElementUpdated(Ehcache cache, Element element) throws CacheException {
	   }
	 
	   /**
		 *  方法,当Ehcache检测到Cache中有元素已经过期的时候将调用notifyElementExpired方法。
		 */
	   @Override
	   public void notifyElementExpired(Ehcache cache, Element element) {
            //过期后逻辑处理
		   getProvider().orderFormService.cacheEventUpOrderStatus(element);
	   }
	   /**
		 *  方法将会在元素被驱除的时候调用。
		 */
	   @Override
	   public void notifyElementEvicted(Ehcache cache, Element element) {
	      System.out.println("evicted");
	   }
	 
	   /**
		 *  方法将在调用Cache的removeAll方法之后被调用。
		 */
	   @Override
	   public void notifyRemoveAll(Ehcache cache) {
	      System.out.println("removeAll");
	   }
	 
	   /**
		 *  方法用于释放资源。
		 */
	   @Override
	   public void dispose() {
	 
	   }
	  
	   public Object clone() throws CloneNotSupportedException {
	      throw new CloneNotSupportedException();
	   }
	   
}

2.MyCacheEventListenerFactory 

package com.seryo.cache;

import java.util.Properties;

import net.sf.ehcache.event.CacheEventListener;
import net.sf.ehcache.event.CacheEventListenerFactory;

/**
 * Event监听工厂
 * @Package com.seryo.cache
 * @ClassName: MyCacheEventListenerFactory 
 */
public class MyCacheEventListenerFactory extends CacheEventListenerFactory {  
    
    @Override  
    public CacheEventListener createCacheEventListener(Properties properties) {  
    	return MyCacheEventListener.INSTANCE; 
    }  
    
 }  

3.MyCacheProvider

package com.seryo.cache;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.seryo.service.bus.OrderFormService;

/**
 * 用来获得订单Service
 * @Package com.seryo.cache
 * @ClassName: MyCacheProvider 
 */
@Component
public class MyCacheProvider {
	
	@Autowired
	protected OrderFormService orderFormService;
}

ehcache-core-2.4.3.jar 包

4.补充 MyCacheEventListenerFactory.java (感谢提醒,很久没有更新内容了.....)

package com.seryo.cache;

import java.util.Properties;

import net.sf.ehcache.event.CacheEventListener;
import net.sf.ehcache.event.CacheEventListenerFactory;

/**
 * Event监听工厂
 * @Package com.seryo.cache
 * @ClassName: MyCacheEventListenerFactory
 * @author hjj
 * @date 2018年7月24日 下午2:13:10
 */
public class MyCacheEventListenerFactory extends CacheEventListenerFactory {  
    
    @Override  
    public CacheEventListener createCacheEventListener(Properties properties) {  
        return MyCacheEventListener.INSTANCE; 
    }  
    
 }  
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值