Ehcache封装的工具类
2015-11-28 16:49
162 查看
最近公司公司项目在框架上用到了Ehcache缓存,关于更多Ehcache详细的内容,请参考一下两个系列的博客,讲的都很好。 Ehcache详细解读 Ehcache系列博客
有了上面的两个系列的博客,更多有关于Ehcache细节的地方,就不在这篇博客中展示了,主要是跟大家分享一下,底层框架中封装关于Ehcache的工具类
CacheContainer类
缓存容器类,用来创建Cache对象,并且用来实现CRUD对象的一系列操作
/**
* @FileName: CacheContainer.java
* @Package:com.tgb.util.Cache
* @Description: TODO
* @author: LUCKY
* @date:2015年11月28日 下午3:27:52
* @version V1.0
*/
package com.tgb.util.Cache;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
* @ClassName: CacheContainer
* @Description: 缓存容器的类
* @author: LUCKY
* @date:2015年11月28日 下午3:27:52
*/
public class CacheContainer {
public static final String DEFAULT_STRATEGY_NAME = "tgbTest";
private CacheManager ehManager;
private static String default_strategy = String
.valueOf(DEFAULT_STRATEGY_NAME);
private static class SingletonHolder {
static CacheContainer instance = new CacheContainer();
}
public static CacheContainer getInstance() {
return SingletonHolder.instance;
}
private CacheContainer() {
ehManager = new CacheManager(Thread.currentThread()
.getContextClassLoader().getResourceAsStream("ehcache.xml"));
}
public static boolean containskey(String key) {
return containskey(default_strategy, key);
}
public static boolean containskey(String cacheStrategy, String key) {
return getInstance().ehManager.getCache(cacheStrategy)
.isKeyInCache(key);
}
public static void removeCache(String cacheName) {
getInstance().ehManager.removeCache(cacheName);
}
public static void removeCacheObject(String cacheName, String key) {
getInstance().ehManager.getCache(cacheName).remove(key);
}
public static void removeCacheObjectAll(String cacheName) {
getInstance().ehManager.getCache(cacheName).removeAll();
}
public static void addCache(String key, Object value) {
}
public static void addCache(String cacheName, String key, Object value) {
Cache cache = getInstance().ehManager.getCache(cacheName);
if (cache != null) {
Element el = new Element(key, value);
cache.put(el);
}
}
public static Object getCacheObject(String cacheName,String key){
Element element=getInstance().ehManager.getCache(cacheName).get(key);
if(element==null){
return null;
}
return element.getObjectValue();
}
}
PlatformCacheManagerEventListenerFactory类
该类是一个工厂类,用来创建具体的CacheManagerEventListener的实现
/**
* @FileName: PlatformCacheManagerEventListenerFactory.java
* @Package:com.tgb.util.Cache
* @Description: TODO
* @author: LUCKY
* @date:2015年11月28日 下午3:53:51
* @version V1.0
*/
package com.tgb.util.Cache;
import java.util.Properties;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.event.CacheManagerEventListener;
import net.sf.ehcache.event.CacheManagerEventListenerFactory;
/**
* @ClassName: PlatformCacheManagerEventListenerFactory
* @Description: CacheManager监听工厂
* @author: LUCKY
* @date:2015年11月28日 下午3:53:51
*/
public class PlatformCacheManagerEventListenerFactory extends CacheManagerEventListenerFactory{
@Override
public CacheManagerEventListener createCacheManagerEventListener(
CacheManager cacheManager, Properties properties) {
return new MyCacheManagerEventListener(cacheManager);
}
}
MyCacheManagerEventListener类
该类用来监听CacheManage的创建和销毁操作
/**
* @FileName: MyCacheManagerEventListener.java
* @Package:com.tgb.util.Cache
* @Description: TODO
* @author: LUCKY
* @date:2015年11月28日 下午3:56:12
* @version V1.0
*/
package com.tgb.util.Cache;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Status;
import net.sf.ehcache.event.CacheManagerEventListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @ClassName: MyCacheManagerEventListener
* @Description: CacheManage监听的实现操作
* @author: LUCKY
* @date:2015年11月28日 下午3:56:12
*/
public class MyCacheManagerEventListener implements CacheManagerEventListener{
private Log logger = LogFactory.getLog( MyCacheManagerEventListener.class );
private final CacheManager cacheManager;
public MyCacheManagerEventListener(CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
public void init() throws CacheException {
if(logger.isInfoEnabled())
logger.info("init Cache..............");
}
public Status getStatus() {
if(logger.isInfoEnabled()){
logger.info("the current Cache status is "+cacheManager.getStatus());
}
return cacheManager.getStatus();
}
public void dispose() throws CacheException {
if(logger.isInfoEnabled()){
logger.info("despose Cache...........");
}
}
public void notifyCacheAdded(String cacheName) {
if(logger.isInfoEnabled()){
logger.info("cacheAdded the cacheName is"+cacheName);
}
}
public void notifyCacheRemoved(String cacheName) {
if(logger.isInfoEnabled()){
logger.info("removeAdded the cacheName is"+cacheName);
}
}
PlatformCacheExceptionHandlerFactory类
异常处理类,主要用来记录CacheMange创建和销毁过程中异常的一些信息
/**
* @FileName: PlatformCacheExceptionHandlerFactory.java
* @Package:com.tgb.util.Cache
* @Description: TODO
* @author: LUCKY
* @date:2015年11月28日 下午3:47:29
* @version V1.0
*/
package com.tgb.util.Cache;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.exceptionhandler.CacheExceptionHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @ClassName: PlatformCacheExceptionHandlerFactory
* @Description: Cache异常处理器
* @author: LUCKY
* @date:2015年11月28日 下午3:47:29
*/
public class PlatformCacheExceptionHandlerFactory implements CacheExceptionHandler {
private Log logger = LogFactory.getLog( getClass() );
public void onException(Ehcache ehcache, Object key, Exception exception) {
//如果Cache发生异常的话,进行日志处理
if(logger.isInfoEnabled()){
logger.info("Cache named \" "+key+"\" throw exception:"+exception.getMessage());
}
}
}
相关文章推荐
- nginx 源码学习笔记(三)——nginx精粹-模块
- 易错java初级面试题
- 二维码扫描相关
- 函数指针与指针函数 http://blog.csdn.net/htyurencaotang/article/details/11490081
- Java虚拟机运行时数据区
- mpich2 error while connecting to host 由于目标计算机积极拒绝,无法连接。 (10061)
- iOS开发问题汇总
- linux下的定时或计时操作(gettimeofday等的用法,秒,微妙,纳秒)(转载)
- 1-4-04:奇偶ASCII值判断
- c++11 线程池系列之一 最简单的线程池
- 数据结构例程——插入排序之直接插入排序
- Hadoop HDFS over HTTP
- 1-4-03:奇偶数判断
- Unix domain socket IPC
- 《疯狂Java讲义》第2章——理解面向对象
- 数据库知识整理:基础语法 第一章
- upnp协议简介(二)
- 安卓ADT离线安装教程
- wpf 在MVVM模式下开发时,怎样让一个属性绑定到多个RadioButton上
- HDU 1074(状态压缩dp)