关于Ehcache在开发环境限制下的配置初始化问题
由于开发环境影响,Ehcache无法由spring初始化并管理[Help 1]
前几天因项目需要需要集成一个轻量级的缓存框架,最后选择了Ehcache。在spring文件配置好后,启动项目。居然报NotFoundClassException错误,在确定jar已经导入的情况下,依然报这个错,折腾了几天后决定放弃在spring中初始化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;
}
获取实例
第二步 存值方法
/**
* 存值
* @param cacheName
* @param key
* @param value
*/
public void put(String cacheName, String key, Object value) {
Cache cache = manager.getCache(cacheName);
cache.acquireWriteLockOnKey(key);
try {
Element element = new Element(key, value);
cache.put(element);
}catch (Exception e) {
e.printStackTrace();
LOG.info(“添加缓存失败, key=”+key+“value=”+value);
} finally {
cache.releaseWriteLockOnKey(key);
}
}
这里有一个acquireWriteLockOnKey(key)方法用于控制重复写,这是ehcache自带的一个锁,经本人测试,加了锁后写的顺序在并发下不会乱。最后一定要releaseWriteLockOnKey(key)释放锁。这是Ehcache自带的。
第三步 取值方法
/**
* 取值
* @param cacheName
* @param key
* @return
*/
public Object get(String cacheName, String key) {
Cache cache = manager.getCache(cacheName);
Element element = cache.get(key);
return element == null ? null : element.getObjectValue();
}
取值就无所谓了,只要在数据库数据变了的时候刷新下缓存就ok了
轻量级的缓存感觉Ehcache还是很不错的选择,赞!