Ehcache CacheManager
CacheManager是Ehcache框架的核心类和入口,它负责管理一个或多个Cache对象。要使用Ehcache框架,必须要先创建 CacheManager 对象。现在我们学习下,如何创建 CacheManager 对象。
1.使用默认配置文件创建单例对象
CacheManager提供了很多无参的static创建方法,我们可以获取唯一的实例,代码如下:
public static void main(String[] args)
{
CacheManager mgr1 = CacheManager.getInstance();
CacheManager mgr2 = CacheManager.create();
CacheManager mgr3 = CacheManager.newInstance(); System.out.println(mgr1 == mgr2);// true
System.out.println(mgr1 == mgr3);// true
}
这3种方式都是等价,获取的唯一实例也是相同的。通过源代码可以很容易的发现,这3个函数就是互相调用的关系。使用这种方式,Ehcahce会报警告,因为我们没有提供自定义的cache配置文件:
警告: No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:ehcache-2.8.1.jar!/ehcache-failsafe.xml
使用ehcache.jar中默认的缓存配置文件来创建EhcahceManager对象,这种方式实际上使用并不多。默认的配置在大多数情况下,都是不能满足应用程序的使用需要。不推荐这种使用方式。
2.使用自定义的ehcache.xml创建单例对象
使用默认的缓存配置文件,很可能不能满足应用的使用,一般来说应用很少会使用默认的ehcache-failsafe.xml 。这个时候,我们可以自己指定ehcache.xml来创建单一CacheManager对象,使用带有参数的static创建类型的方法。
URL url = TestCacheManager.class.getClassLoader().getResource("conf/ehcache.xml");
CacheManager mgr1 = CacheManager.create(url);
CacheManager mgr2 = CacheManager.create("src/conf/ehcache.xml");
CacheManager mgr3 = CacheManager.newInstance("src/conf/ehcache.xml");
System.out.println(mgr1 == mgr2);// true
System.out.println(mgr1 == mgr3);// true
可以发现:使用CacheManager的static方法,在指定了自定义的缓存配置文件的情况下,创建的仍然是唯一的单例对象。在小规模的应用中,我们可以在ehcache.xml中配置所有需要的<cache>。这样就能够使用一个CacheManager对象,来管理配置文件中的多个<cache>
3.static类型创建方法,有参和无参的区别
CacheManager类static类型的创建方法包括:create()、getInstance()、newInstance(),这些API让我们可以使用默认的缓存配置文件,也可以使用自定义的配置文件,来创建CacheManager对象。一般来说,我们在应用中不会既使用无参的static创建方法,又使用有参的static创建方法。这种使用方式是不合理的,也是没有必要。我有点细节控,还是看下能不能同时使用这2种方式。
CacheManager mgr1 = CacheManager.create("src/conf/ehcache.xml");
CacheManager mgr4 = CacheManager.create();
CacheManager mgr5 = CacheManager.getInstance();
CacheManager mgr6 = CacheManager.newInstance();
System.out.println(mgr1 == mgr4);// true
System.out.println(mgr1 == mgr5);// true
System.out.println(mgr1 == mgr6);// false
当使用ehcache.xml创建CacheManager对象的时候,CacheManager中的singleton属性会记录创建的对象值,即创建了CacheManager对象, singleton会记录该单例对象,不再是null ;
CacheManager.create()和CacheManager.getInstance()都会先判断 singleton属性是否为null,如果为null则继续调用newInstance(),如果不为null则直接返回。所以mgr1==mgr4==mgr5;
CacheManager.newInstance();不会判断 singleton是否为null,直接使用默认的ehcache-failsafe.xml,新建一个CacheManager对象,所以mgr1 != mgr 6.
通过源码可以发现,它们的调用关系如下:




4.使用构造函数创建CacheManager对象
CacheManager m1 = new CacheManager();
System.out.println(m1.getName()); CacheManager m2 = new CacheManager("src/conf/ehcache.xml");
System.out.println(m2.getName()); System.out.println(m1 == m2);// false // CacheManager m3 = new CacheManager();
// CacheManager m4 = new CacheManager("src/conf/ehcache.xml");
可以看出new出来的对象都是不同实例的,也就是说Ehcache框架支持多个CacheManager对象的情况。特别注意:
同一个缓存配置文件,只能new一个CacheManager对象。如果打开注释代码中的m3 和 m4会报错:
Another CacheManager with same name 'atyManager' already exists in the same VM .Please provide unique names for each CacheManager
Ehcache CacheManager的更多相关文章
- springboot整合cache报错org.springframework.cache.ehcache.EhCacheCacheManager cannot be cast to net.sf.ehcache.CacheManager
原来的代码 private static CacheManager cacheManager = SpringContextHolder.getBean("cacheManager" ...
- EhCache WebCache 与 SpringMVC集成时 CacheManager冲突的问题
转自:点击打开链接 http://www.cnblogs.com/daxin/p/3560989.html EhCache WebCache 与 SpringMVC集成时 CacheManager冲突 ...
- EHCache 实现通用类 CacheManager
package com.zhubaje.api.workflow.ehcache; import java.io.Serializable; import java.util.ArrayList; i ...
- Spring整合Ehcache管理缓存
前言 Ehcache 是一个成熟的缓存框架,你可以直接使用它来管理你的缓存. Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache),但本身不直接提供缓存功能的实现.它 ...
- EhCache的配置
JPA和Hibernate的二级缓存都是这样做的 代码目录: 这是基础的jar包,如果少的话,再去maven下载 <!-- Spring --> <dependency> &l ...
- Ehcache Demo
转自: https://my.oschina.net/zb0423/blog/60957http://www.cnblogs.com/fsjin/articles/3521261.html Ehcac ...
- Spring整合Ehcache管理缓存(转)
目录 前言 概述 安装 Ehcache的使用 HelloWorld范例 Ehcache基本操作 创建CacheManager 添加缓存 删除缓存 实现基本缓存操作 缓存配置 xml方式 API方式 S ...
- 使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据
使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据1.如何持久化到磁盘使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache ...
- 【Java】:ehcache
ehcache是一个纯Java进程内缓存框架,是hibernate默认的Cacheprovider.(出自百度百科). 1. 快速2. 简单3. 多种缓存策略4. 缓存数据有两级:内存和磁盘,因此无需 ...
随机推荐
- hadoop2.7.0分布式系统搭建(ubuntu14.04)
因为使用需要,在自己小本上建了四个虚拟机,打算搭建一个1+3的hadoop分布式系统. 环境:hadoop2.7.0+ubuntu14.04 (64位) 首先分别为搭建好的虚拟机的各主机重命名 方法: ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法】
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- Bzoj1083 1083: [SCOI2005]繁忙的都市【MST】
大水题,真不知道出题者是怎么把这么水的题出的这么长的TAT 其实这题在于考语文水平,一共三个要求,前两个要求意思就是要选出的道路是树形的,最后一个要求就是要权值最小,于是整个题意说白了就是求一棵MST ...
- yum update 出错解决办法
卸载掉yum和python 于是我卸载了python和yum,觉得自己重新安装python和yum. 步骤1:卸载python rpm -qa|grep python|xargs rpm -e --a ...
- poj1717 Dominoes (背包)
A domino is a flat, thumbsized tile, the face of which is divided into two squares, each left blank ...
- HDU4405-Aeroplane chess(概率DP求期望)
Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz start ...
- Moya 与 RxSwift 使用
如在OC中使用AFNetworking一般,Swift我们用Alamofire来做网络库.而Moya在Alamofire的基础上又封装了一层: 1.关于moya moya 官方说moya有以下特性-_ ...
- Contest Hunter #46 T1 磁力块 [分块]
描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距离不大于磁石A ...
- 自定义Navigation按钮及Title
导航栏自带的按钮,时常不能满足要求,所以深深需要进行各种定制. 写一个UINavigationItem的category // UINavigationItem+CB_ChangeButton.h ...