项目搭建系列之三:SpringMVC框架下使用Ehcache对象、数据缓存
注明:该文章为以前写的文章,这里只更改了标题,无GitHub源码下载。
一、准备工作
如果已经成功搭建SpringMVC环境,那么就可以进入Ehcache的准备工作了。
1、下载jar包
Ehcache 对象、数据缓存:
http://ehcache.org/downloads/destination?name=ehcache-2.9.0-distribution.tar.gz&bucket=tcdistributions&file=ehcache-2.9.0-distribution.tar.gz
2、需要添加jar包到工程中
ehcache-core-2.9.0.jar
3、需要添加以下文件到src目录中
ehcache.xml 配置文件
ehcache.xsd XML结构定义文件
这些文件在ehcache-2.9.0文件夹中可以找到
二、Ehcache配置介绍
<diskStore>表示当内存缓存中对象数量超过类设置内存缓存数量时,将缓存对象写到硬盘,path=”java.io.tmpdir”表示把数据写到这个目录下。
Java.io.tmpdir目录在运行时会根据相对路径生成。
<defaultCache>表示设定缓存的默认数据过期策略。
<cache>表示设定用具体的命名缓存的数据过期策略。 name表示具体的缓存命名。
maxElementsInMemory表示cache中最大允许保存的对象数据量。
eternal:一旦设置了eternal=true,timeToLive和timeToIdle就失效了,缓存里的数据,只有当缓存满的时候,才有可能被清除。
如果我们想手动给某一条数据设置过期时间,则我们需要把eternal的值设为false。
timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,
如果该值是 0 就意味着元素可以停顿无穷长的时间。
timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,
这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。 overflowToDisk:内存不足时,是否启用磁盘缓存。
memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。
三、对象、数据缓存案例
ehcache.xml配置:
<?xml version="1.0" encoding="gbk"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"> <diskStore path="java.io.tmpdir" /> <defaultCache
maxElementsInMemory="10000"
//缓存中最大允许创建的对象数
eternal="false"
//缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期
timeToIdleSeconds="120"
//缓存数据钝化时间(设置对象在它过期之前的空闲时间)
timeToLiveSeconds="120"
//缓存数据的生存时间,不论缓存是否一直被使用,都将被删除
overflowToDisk="false"
//内存不足时,是否启用磁盘缓存
/> <cache name="role_cache" maxElementsInMemory="200" eternal="true"
overflowToDisk="true" /> </ehcache>
applicationContext.xml配置:
启动工程时初始化缓存
<bean id="roleMenuCacheInit" class="cn.jxufe.web.cache.RoleMenuCacheInit" init-method="init" lazy-init="false" >
RoleMenuCache.java
public class RoleMenuCache { private final static String ROLE_NAME="role_cache";
private static Cache menuCache=CacheManager.getInstance().getCache(ROLE_NAME); //将角色菜单放入cache
public synchronized static void putRoleMenuCaches(long roleId, Collection<SystemNavMenu>menu){
Element element=new Element(roleId, menu);
menuCache.put(element);
} //获取角色菜单
@SuppressWarnings("unchecked")
public synchronized static Collection<SystemNavMenu> getRoleMenuCaches(long roleId){
Element element = null;
try {
element =menuCache.get(roleId);
} catch (CacheException cacheException) {
throw new DataRetrievalFailureException("MenuCache failure: " + cacheException.getMessage(), cacheException);
}
if (element == null) {
return null;
} else {
return (Collection<SystemNavMenu>) element.getValue();
}
} public synchronized static void removeAllMenuCache(){
menuCache.removeAll();
menuCache.clearStatistics();
menuCache.flush();
} public synchronized static void removeCache(int role){
menuCache.remove(role);
}
}
RoleMenuCacheInit.java
public class RoleMenuCacheInit { protected final Logger logger = LoggerFactory.getLogger(getClass()); private IndexService indexService; public void init(){
logger.info("正在初始化角色菜单缓存");
Collection<Role> roles=indexService.getAllRoles();
for(Role r:roles){
RoleMenuCache.putRoleMenuCaches(r.getId(),indexService.getRoleMenus(r.getId()));
}
logger.info("角色菜单缓存初始化结束");
} public void setIndexService(IndexService indexService) {
this.indexService = indexService;
} }
四、使用方法
//从数据库中获取角色菜单
List<SystemNavMenu> lcMenu=indexService.getRoleMenus(defRoleId);
//从缓存中获取角色菜单
Collection<SystemNavMenu> Menu=RoleMenuCache.getRoleMenuCaches(defRoleId);
项目搭建系列之三:SpringMVC框架下使用Ehcache对象、数据缓存的更多相关文章
- 分布式爬虫搭建系列 之三---scrapy框架初用
第一,scrapy框架的安装 通过命令提示符进行安装(如果没有安装的话) pip install Scrapy 如果需要卸载的话使用命令为: pip uninstall Scrapy 第二,scrap ...
- Java web项目搭建系列之二 Jetty下运行项目
在项目pom.xml文件中添加Jetty运行配置 在pom.xml文件project节点下插入如下代码: <build> <plugins> <plugin> &l ...
- 项目搭建系列之二:SpringMVC框架下配置MyBatis
1.什么是MyBatis? MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis ...
- .Neter玩转Linux系列之三:Linux下的分区讲解
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- 使用Javamelody验证struts-spring框架与springMVC框架下action的訪问效率
在前文中我提到了关于为何要使用springMVC的问题,当中一点是使用springMVC比起原先的struts+spring框架在效率上是有优势的.为了验证这个问题,我做了两个Demo来验证究竟是不是 ...
- springMVC框架下JQuery传递并解析Json数据
springMVC框架下JQuery传递并解析Json数据
- springmvc框架下ajax请求传参数中文乱码解决
springmvc框架下jsp界面通过ajax请求后台数据,传递中文参数到后台显示乱码 解决方法:js代码 运用encodeURI处理两次 /* *掩码处理 */ function maskWord( ...
- (转)springMVC框架下JQuery传递并解析Json数据
springMVC框架下JQuery传递并解析Json数据 json作为一种轻量级的数据交换格式,在前后台数据交换中占据着非常重要的地位.Json的语法非常简单,采用的是键值对表示形式.JSON 可以 ...
- 项目搭建系列之一:使用Maven搭建SpringMVC项目
约定电脑都安装了eclipse,且已配置好Maven以及eclipse插件. 1.Eclipse 2.maven 3.Eclipse 需要安装maven插件.url:maven - http://do ...
随机推荐
- leetcode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)
目录 题目描述: 示例: 解法: 题目描述: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例: 给出 中序遍历 inorder = [9,3,15,20,7] ...
- 使用Eclipse的几个必须掌握的快捷方式
“工若善其事,必先利其器”,感谢Eclipse,她 使我们阅读一个大工程的代码更加容易,在阅读的过程中,我发现掌握几个Eclipse的快捷键会使阅读体验更加流畅,写出来与诸君分享,欢迎补充. 1. C ...
- loj #2255. 「SNOI2017」炸弹
#2255. 「SNOI2017」炸弹 题目描述 在一条直线上有 NNN 个炸弹,每个炸弹的坐标是 XiX_iXi,爆炸半径是 RiR_iRi,当一个炸弹爆炸时,如果另一个炸弹所在位置 X ...
- Python之路迭代器协议、for循环机制、三元运算、列表解析式、生成器
Python之路迭代器协议.for循环机制.三元运算.列表解析式.生成器 一.迭代器协议 a迭代的含义 迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的 ...
- [SCOI2007]最大土地面积(旋转卡壳)
首先,最大四边形的四个点一定在凸包上 所以先求凸包 有个结论,若是随机数据,凸包包括的点大约是\(\log_2n\)个 然鹅,此题绝对不会这么轻松,若\(O(n^4)\)枚举,只有50分 所以还是要想 ...
- java集合之Set接口
Set集合通常不能记住元素添加的顺序,其他的操作和它的父接口基本相同.只是行为上有细微的差别,Set集合不能包含相同的元素.如果尝试添加相同的元素,调用add()方法将返回false,且新元素不能被加 ...
- pytest的一些你爱不释手的插件
1. pytest-html 安装: pip install pytest-html # 通过pip安装pytest-html 运行测试文件的时候,命令行加上对应参数即可 比如:pytest test ...
- LeetCode6. Z字形变换
描述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...
- POJ3322 Bloxorz I 无脑广搜(我死了。。。)
多测不清空,爆零两行泪....我死了QWQ 每个节点3个状态:横坐标,纵坐标,和方向 说一下方向:0:立着,1:竖着躺着,上半部分在(x,y),2:横着躺着,左半部分在(x,y) 然后就有了常量数组: ...
- UVALive - 4682
/*H E A D*/ struct Trie{ int son[maxn<<2][2]; int b[67],tot; void init(){ // memset(son,0,size ...