项目搭建系列之三: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);
时间: 2024-11-07 08:15:47

项目搭建系列之三:SpringMVC框架下使用Ehcache对象、数据缓存的相关文章

项目搭建系列之二:SpringMVC框架下配置MyBatis

1.什么是MyBatis? MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 回到目录 2.环境准备 搭建好SpringMVC框架,可以阅读<项目搭建系列之一:使用Maven搭建SpringMVC项目>,也可以直

springMVC框架下JQuery传递并解析Json数据

json作为一种轻量级的数据交换格式,在前后台数据交换中占领着很重要的地位.Json的语法很简单,採用的是键值对表示形式.JSON 能够将 JavaScript 对象中表示的一组数据转换为字符串,然后就能够在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给server端程序,也能够从server端程序传递json格式的字符串给前端并由前端解释.这个字符串是符合json语法的,而json语法又是javascript语法的子集,所以javascript很easy解释

项目搭建系列之一:使用Maven搭建SpringMVC项目

约定电脑都安装了eclipse,且已配置好Maven以及eclipse插件. 1.Eclipse 2.maven 3.Eclipse 需要安装maven插件.url:maven - http://download.eclipse.org/technology/m2e/releases . 1.新建一个Maven Project 2.选择工作空间 3.搭建Web工程,我们选择maven-archetype-webapp类型 4.填写项目参数,如图 5.以上步骤完成时的工程结构目录 6.可以查看或修

springMVC框架下——通用接口之图片上传接口

我所想要的图片上传接口是指服务器端在完成图片上传后,返回一个可访问的图片地址. spring mvc框架下图片上传非常简单,如下 1 @RequestMapping(value="/uploadImg", method=RequestMethod.POST) 2 @ResponseBody 3 public String uploadImg(@RequestParam(value="img")MultipartFile img){ 4 File f = new Fi

springmvc框架中的核心对象DispatcherServlet

SpringMVC是Spring中的模块,它实现了mvc设计模式,首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handle,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handle进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染,并把数据装入到request域,返回给用户. Dis

ssm框架下怎么批量删除数据?

ssm框架下批量删除怎么删除? 1.单击删除按钮选中选项后,跳转到js函数,由函数处理 2. 主要就是前端的操作 js 操作(如何全选?如何把选中的数据传到Controller中) 3.fun()函数(前端) /*添加删除选中栏*/ function fun(){ //给删除选中按钮添加单击事件 document.getElementById("delSelected").onclick = function(){ if(confirm("您确定要删除选中条目吗?"

项目搭建系列之四:SpringMVC框架下使用UrlRewrite实现地址重写

简单记录一下UrlRewrite实现地址重写功能. 1.pom.xml 在pom.xml增加配置UrlRewrite jar <!-- URL Rewrite --> <dependency> <groupId>org.tuckey</groupId> <artifactId>urlrewritefilter</artifactId> <version>4.0.4</version> </dependen

javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)

方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: 1 public static void main(String args[]) throws IOException, DocumentException { 2 String fileName = "D:/testPDF.pdf"; // pdf模板 3 InputStream input = new FileInputStream(new

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/