springMVC+mybatis+ehcache详细配置

一、 Mybatis+Ehcache配置

为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方案,在此我们主要是做查询缓存,提高查询的效率.

整合MyBatis和ehcache需要的jar包如下:

  1. ehcache-core-2.4.4.jar
  2. mybatis-ehcache-1.0.0.jar
  3. slf4j-api-1.6.1.jar
  4. slf4j-log4j12-1.6.2.jar

    资源已上传到百度网盘点击此处下载,其中包括了一些mybatis的jar包,log4j,mysql驱动等必须的包

将上述包加入项目之后,新建一个文件名,该文件名必须为ehcache.xml,放在类路径下面,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	xsi:noNamespaceSchemaLocation="../bin/ehcache.xsd">    
    <diskStore path="java.io.tmpdir"/>     
    <!-- 缓存位置可以是自定义的硬盘地址也可以是JVM默认使用的缓存地址-->    
    <!--<diskStore path="d:\cache"/> -->    
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="true"/>      
    <!--         
    配置自定义缓存        
    name:Cache的唯一标识        
    maxElementsInMemory:缓存中允许创建的最大对象数        
    maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大        
    eternal:Element是否永久有效,一但设置了,timeout将不起作用,对象永不过期。       
    timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,                    
            两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,                    
            如果该值是 0 就意味着元素可以停顿无穷长的时间。        
    timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,                               这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。        
    overflowToDisk:内存不足时,是否启用磁盘缓存。        
    diskPersistent:是否缓存虚拟机重启期数据
    diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
    diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区        
    memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)        
    <cache name="SimplePageCachingFilter"         
        maxElementsInMemory="10000"         
        eternal="false"        
        overflowToDisk="false"         
        timeToIdleSeconds="900"         
        timeToLiveSeconds="1800"        
        memoryStoreEvictionPolicy="LFU" />    -->
</ehcache>

该文件是ehcache的配置文件,上面的注释已经说得很清楚了,这里我用的是默认的配置

至此ehcache已经配置好了,然后只需要在你想要缓存的mapper配置文件里面加入以下内容,该查询语句得到的结果将会被缓存

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.qiuqiu.dao.PersonDao">
    <!-- 以下两个<cache>标签二选一,第一个可以输出日志,第二个不输出日志 只要在对应的mapper配置文件中加入<cache />标签即可-->
    <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
    <!-- <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> -->
    <select id="selectUserById" parameterType="int" resultType="org.qiuqiu.vo.Person">
        select * from person where id=#{id} 
    </select>
</mapper>

这样就对这个mapper里面的各种结果进行了缓存。程序中不需要修改任何地方。

这个过程不复杂,也没什么难度,不过Mybatis的官方说的也太含糊了。附件下面有,需要的各种jar包已经包含。点击下载附件。原文地址:http://qiuqiu0034.iteye.com/blog/1162952

二、 springMVC+mybatis+ehcache详细配置

首先需要先需要两个主要的jar包

  1. ehcache-core-2.4.6.jar
  2. mybatis-ehcache-1.0.1.jar

ehcache-core一定要1.3以上的版本 因为1.3之前好像不支持集群的。然后需要创建一个ehcache.xml在类路径下面

<?xml version="1.0" encoding="utf-8"?>   
    <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="30" timeToLiveSeconds="30" overflowToDisk="false"/>  
    <!--           
    配置自定义缓存          
    maxElementsInMemory:缓存中允许创建的最大对象数          
    eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。          
    timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,                      
                    两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,                      
                    如果该值是 0 就意味着元素可以停顿无穷长的时间。          
    timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,                                      这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。          
    overflowToDisk:内存不足时,是否启用磁盘缓存。          
    memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。      
    -->       
    <cache name="testCache"           
    maxElementsInMemory="10000"           
    eternal="true"          
    overflowToDisk="false"           
    timeToIdleSeconds="0"           
    timeToLiveSeconds="600"          
    memoryStoreEvictionPolicy="LFU" />  
</ehcache>

上面的diskStor path 你可以指定某一个路径下,java.io.tmpdir 指的是你系统的缓存目录,可以百度下然后一般这个xml都需要有一个defaultCache,就是默认的cache配置  里面有哪些参数自己可以网上查查api

然后下面我还配置了一个testCache,我找网上资料 没看到哪里明说,然后我自己测试,发现ehcache是可以生成多个cache的,每个cache可以根据不同的业务场景作用于不同的业务(即里面的参数配置不同),所以这样看似多配置了,其实是更加增加了灵活性。

然后在spring的配置文件里面加上一段配置:

<!-- 使用ehcache缓存 -->    
   <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
     <property name="configLocation" value="classpath:ehcache.xml" />  
   </bean>

这样就可以把ehcache和spring整合起来了

然后在对应的mapper.xml 里面加上

<cache type="org.mybatis.caches.ehcache.LoggingEhcache" >  
    <property name="timeToIdleSeconds" value="3600"/><!--1 hour-->  
    <property name="timeToLiveSeconds" value="3600"/><!--1 hour-->  
    <property name="maxEntriesLocalHeap" value="1000"/>  
    <property name="maxEntriesLocalDisk" value="10000000"/>  
    <property name="memoryStoreEvictionPolicy" value="LRU"/>  
</cache>

后面的参数配置不加也可以,都会有一个默认值,大家也可以查查一共有哪些配置,然后根据自己的需要来配置,然后这个配置是会带上cache执行的日志,如果不要带日志可以把LogginEhcache改成EhcacheCache。

在mapper.xml这样设置了默认是全部操作都会执行缓存策略,如果有某些sql不需要执行,可以把useCache设置为false。

<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.anenjoy.manage.entity.TblUserTempExample" useCache="false" >

其实经过这样的配置ehcache已经基本OK了。接下来就测试一下。

原文测试代码如下:

long begin = System.nanoTime();  
        tempService.selectAll();  
        long end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        // the second time  
        begin = System.nanoTime();  
        try {  
            tempService.insertTblUserTemp("1", "1", "1", "1");  
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        // the second time  
        begin = System.nanoTime();  
        tempService.selectAll();  
        end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        // the third time  
        begin = System.nanoTime();  
        tempService.selectAll();  
        end = System.nanoTime() - begin;  
        System.out.println("count :" + end);  
        return "";

这里面有4条输出语句

首先是查询一次某表     执行了查询sql

然后给某表插入一条信息  执行了插入sql

然后再查询某表   执行了查询sql,这是正确的  因为你执行了非查询语句,这个时候需要重新访问数据库

然后再一次查询某表  没有执行查询sql    这代表缓存是有用的,他就没有访问数据库了,直接从内存或者磁盘里面获取了

也可以根据count来查看操作的时间

count :681719

————————————————-com.anenjoy.manage.mapper.TblUserTempMapper.insert

insert into TBLUSERTEMP (ACTIVECODE, PASSWORDMD5, PASSWORDRANDOMKEY,

PHONE, EMAIL, USERNAME,

AWARTAR, STATUS, CREATEDATE,

USERID, IMSI, CHECKCODE

)

values (?, ?, ?,

?, ?, ?,

?, ?, ?,

?, ?, ?

)

count :129557388

————————————————-com.anenjoy.manage.mapper.TblUserTempMapper.selectByExample

select

ACTIVECODE, PASSWORDMD5, PASSWORDRANDOMKEY, PHONE, EMAIL, USERNAME, AWARTAR, STATUS,

CREATEDATE, USERID, IMSI, CHECKCODE

from TBLUSERTEMP

count :333938203

count :560704

然后这些基本上OK了

原文地址:http://www.darrenzhong.com/?p=73#codesyntax_6

源码下载:http://pan.baidu.com/s/1jGnATds   解压密码:Darren中博客

总结:以上两种方式我都有试过,也测试过两种方式的效率。在此发表一下个人观点,如有其他观点欢迎大家讨论。

  1. 使用ehcache+mybatis的查询效率不如springMVC+mybatis+ehcache的效率高。
  2. ehcache.xml配置文件中的<diskStore path="java.io.tmpdir"/>节点使用系统默认缓存位置的效率比使用自定义缓存位置 path="d:\cache"的效率要高。

最后附上我的demo源码:源码下载

源码里加了数据库的sql文件 直接导入即可,之前还试了mybatis数据库的读写分离。但是他们都是独立存在的,并不会互相影响。下次再写一篇关于数据库读写分离的吧。

暂时就这些吧。第一次发博文。

2015年3月17日 15:41:14

时间: 2024-10-03 21:24:31

springMVC+mybatis+ehcache详细配置的相关文章

(转)springMVC+mybatis+ehcache详细配置

一. Mybatis+Ehcache配置 为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方案,在此我们主要是做查询缓存,提高查询的效率. 整合MyBatis和ehcache需要的jar包如下: ehcache-core-2.4.4.jar mybatis-ehcache-1.0.0.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.2.jar 资源已上传

springmvc,mybatis,shiro综合配置示例

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 htt

springmvc,mybatis,shiro综合配置示例【转】

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 htt

maven+springMVC+mybatis+junit详细搭建过程 【转】

springMVC+mybatis框架搭建 首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什么样的效果,自己的功能有哪些? (假设效果:项目目录结构清晰,能够查询到本地数据库中的内容..) 1.  工程目录结构整理清楚 在src/main/java文件夹中,新建包cn.springmvc.model(存放javabean), cn.springmvc.dao(存放spring与mybatis连接接口), cn.springmvc.service(service接口), cn.spri

maven+springMVC+mybatis+junit详细搭建过程

springMVC+mybatis框架搭建 首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什么样的效果,自己的功能有哪些? (假设效果:项目目录结构清晰,能够查询到本地数据库中的内容..) 1.  工程目录结构整理清楚 在src/main/java文件夹中,新建包cn.springmvc.model(存放javabean), cn.springmvc.dao(存放spring与mybatis连接接口), cn.springmvc.service(service接口), cn.spri

原:maven+springMVC+mybatis+junit详细搭建过程

阅读目录 1.  工程目录结构整理清楚 2.  引入依赖包 3. 配置数据库连接属性 4.  配置spring配置文件 5.  java代码编写(model,dao,service层代码) 6.  mybatis配置 7.  junit测试插入功能 8.  springMVC模块搭建 9.  log4j日志记录搭建 10.  测试运行 整体包下载地址: springMVC+mybatis框架搭建 首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什么样的效果,自己的功能有哪些? (假设效

【推荐】微服务大型分布式企业框架 dubbo + springmvc + mybatis + ehcache + redis Jeesz分布式架构

框架简介--主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件组件.代码生成等.采用分层设计.双重验证.提交数据安全编码.密码加密.访问验证.数据权限验证.平台简介 是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. 本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.A

框架,springmvc,mybatis,ehcache,源码

获取[下载地址] A 代码生成器(开发利器);     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身

Maven+MySQL+Spring+SpringMVC+Mybatis(详细)

本来想写一个大而全的详细教程的,包括一些使用技巧,后来发现自己有点Hold不住的感觉(不信你试试),就改写一个扫盲篇了 整篇博文包括maven安装,mysql安装,环境搭建,以及配置扫盲.框架的搭建会从裸Mybatis来开始,到整合Spring,再到前台显示(SpringMVC). 首先来看maven的安装. 这个很简单,在官网上下载apache-maven-3.*.*-bin.zip或者apache-maven-3.*.*-bin.tar.gz(注意标识-bin) 博主这里下载的是apache