缓存工具类MyCacheUtil
生活随笔
收集整理的这篇文章主要介绍了
缓存工具类MyCacheUtil
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
MyCacheUtil.java
package com.sunrise.jop.common.util;import java.io.File; import java.sql.Timestamp; import java.util.HashMap; import java.util.Map;import test.TestHello;/*** 缓存工具类* */ public class MyCacheUtil {private static final int CACHE_TIME = 1000 * 5 ; //默认缓存 1分钟private static Map<String,MyCache> cacheMap = new HashMap<String,MyCache>();/*** 缓存properties文件内容* filename properties的路径* key为properties中所取字段的key* isForever 是否永久保存* time有效时间 ,为null取默认时间(1分钟)* */public static Object propertiesCache(String filename, String key,boolean isForever,Integer time){String mapKey = filename+File.separator+key;Timestamp nowTime = MyTimeUtil.getNowTime();if( cacheMap.containsKey(mapKey) ){MyCache cache = cacheMap.get(mapKey);if(cache.isForever()==true){return cache.getObject();}else{if( cache.getDestroyTime() > nowTime.getTime()){ //未失效return cache.getObject();}}}String result = PropertiesUtil.getProp(filename, key);Timestamp destroyTime = null;if(time==null||time<=0){destroyTime = MyTimeUtil.getNextTime(nowTime, CACHE_TIME);}else{destroyTime = MyTimeUtil.getNextTime(nowTime, time);}MyCache cache = new MyCache(result,isForever,destroyTime.getTime());cacheMap.put(mapKey, cache);return result;}/*** 缓存对象* clazz为缓存的对象* isForever是否永久缓存对象* time有效时间 ,为null取默认时间(1分钟)* @throws ClassNotFoundException * */public static Object objectCache(Class clazz,boolean isForever,Integer time) throws ClassNotFoundException{if(clazz==null) return null;String mapKey = clazz.getName();Timestamp nowTime = MyTimeUtil.getNowTime();if( cacheMap.containsKey(mapKey) ){MyCache cache = cacheMap.get(mapKey);if(cache.isForever()==true){return cache.getObject();} else if( cache.getDestroyTime() > nowTime.getTime()){ //未失效return cache.getObject();}}Object object = null;try {object = Class.forName(clazz.getName()).newInstance();} catch (Exception e) {e.printStackTrace();} Timestamp destroyTime = null;if(time==null||time<=0){destroyTime = MyTimeUtil.getNextTime(nowTime, CACHE_TIME);}else{destroyTime = MyTimeUtil.getNextTime(nowTime, time);}MyCache cache = new MyCache(object,isForever,destroyTime.getTime());cacheMap.put(mapKey, cache);return object;}} MyTimeUtil.java package com.sunrise.jop.common.util;import java.sql.Timestamp; import java.util.Calendar; import java.util.Date;/*** 时间工具类* */ public class MyTimeUtil {//得到现在时间public static Timestamp getNowTime(){return new Timestamp(new Date().getTime());}/** * 得到下一个时间 * currentTime 当前时间 * interval 时间间隔(毫秒) * */ public static Timestamp getNextTime(Timestamp currentTime,int interval){ if(currentTime == null) return null; int intervalSecond = interval / 1000; Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(currentTime.getTime())); calendar.add(Calendar.SECOND, intervalSecond); return new Timestamp(calendar.getTimeInMillis() ); }//}MyCache.java package com.sunrise.jop.common.util;/*** 缓存类* */class MyCache{private boolean isForever ;//是否永久private long destroyTime; //销毁时间private Object object; //缓存的对象public MyCache(Object object, boolean isForever,long destroyTime) {this.isForever = isForever;this.destroyTime = destroyTime;this.object = object;}public long getDestroyTime() {return destroyTime;}public void setDestroyTime(long destroyTime) {this.destroyTime = destroyTime;}public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}public boolean isForever() {return isForever;}public void setForever(boolean isForever) {this.isForever = isForever;}}
TestMyCache.java
package test;import static org.junit.Assert.*;import org.junit.Test;import com.sunrise.jop.common.util.MyCacheUtil;public class TestMyCache {// 测试缓存对象@Testpublic void testObjectCache() {try{TestHello testHello = (TestHello) MyCacheUtil.objectCache(TestHello.class, false,null);System.out.println("testHello1 = "+ testHello);testHello = (TestHello) MyCacheUtil.objectCache(TestHello.class, false,null);System.out.println("testHello2 = "+ testHello);Thread.sleep(1000*5*2);testHello = (TestHello) MyCacheUtil.objectCache(TestHello.class,false, null);System.out.println("testHello3 = "+ testHello);}catch(Exception e){e.printStackTrace(); }}// 测试缓存properties文件内容@Testpublic void testPropertiesCache() {try{String filename = "email.properties";String key = "smtpHostName";Object value = MyCacheUtil.propertiesCache(filename, key, false, null);System.out.println("value1 = " + value+" "+value.toString());value = MyCacheUtil.propertiesCache(filename, key, false, null);System.out.println("value1 = " + value+" "+value.toString());Thread.sleep(1000*5*2);value = MyCacheUtil.propertiesCache(filename, key, false, null);System.out.println("value1 = " + value+" "+value.toString());}catch(Exception e){e.printStackTrace();}}}总结
以上是生活随笔为你收集整理的缓存工具类MyCacheUtil的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: (9) ab测试工具安装与使用
- 下一篇: oracle实现主键自动增长