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. 缓存数据有两级:内存和磁盘,因此无需 ...
随机推荐
- spring之lazy-init
lazy-init:延迟实例化 ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化.提前实例化意味着作为初始化过程的一部分,appli ...
- 【gets getline的用法 char[]转化为str】poj 2418
http://poj.org/problem?id=2418 [注意] 1. 输入有空格,用 char str[maxn]; while(gets(str)){ str[]!='\0'; } 或 st ...
- 【2018.8.10】四连测day4 题解
T1:给出一棵 $n$ 个节点的无根树,其中 $m$ 个节点是特殊节点,求对于任意 $i ∈ [0, m]$,包含 $i$ 个特殊节点的联通块个数$\mod 998244353$. $1<=n, ...
- android系统编译打开系统蓝牙
在项目配置文件ProjectConfig.mk中开启蓝牙以后,但是设置菜单中并没有出现蓝牙选项,最后发现是因为ProjectConfig.mk同级目录下没有蓝牙配置文件android.hardware ...
- android开发里跳过的坑——camera调用setDisplayOrientation设置预览显示旋转无效
问题原因,在surfaceview没有设置给camera之前调用了,所以,这个方法一定要在camera.setPreviewDisplay(surfaceHolder)这个之后,启动相机预览之前调用.
- mac 获得进程信息的方法
NSProcessInfo可以获得当前进程的信息.获得所有活动进程信息可以尝试使用下面的方法. 进程的信息可以通过ps命令得到也可以通过sysctl方法得到. 但是我总是不能获取进程的流量信息,关于这 ...
- android studio AndroidManifest
一.目录结构 1. AndroidManifest.xml 它是一个清单文件,提供应用的基本信息 <?xml version="1.0" encoding="utf ...
- codevs——1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- Linux下二进制包、源代码包、rpm包
主要提供三种格式的mysql包:rpm格式.二进制格式.源码格式:(tar打包,gz压缩) rpm格式: libjpeg-devel-6b-33.x86_64.rpm #rpm格式很好区分 ...
- Codeforces 959 E Mahmoud and Ehab and the xor-MST
Discription Ehab is interested in the bitwise-xor operation and the special graphs. Mahmoud gave him ...