mybatis缓存之整合第三方缓存工具ehcache

1、加入以下依赖包

2、配置ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
 <!-- 磁盘保存路径 -->
 <diskStore path="D:\44\ehcache" />

 <defaultCache
   maxElementsInMemory="10000"
   maxElementsOnDisk="10000000"
   eternal="false"
   overflowToDisk="true"
   timeToIdleSeconds="120"
   timeToLiveSeconds="120"
   diskExpiryThreadIntervalSeconds="120"
   memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>

<!--
属性说明:
l diskStore:指定数据在磁盘中的存储位置。
l defaultCache:当借助CacheManager.add("demoCache")创建Cache时,EhCache便会采用<defalutCache/>指定的的管理策略

以下属性是必须的:
l maxElementsInMemory - 在内存中缓存的element的最大数目
l maxElementsOnDisk - 在磁盘上缓存的element的最大数目,若是0表示无穷大
l eternal - 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断
l overflowToDisk - 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上

以下属性是可选的:
l timeToIdleSeconds - 当缓存在EhCache中的数据前后两次访问的时间超过timeToIdleSeconds的属性取值时,这些数据便会删除,默认值是0,也就是可闲置时间无穷大
l timeToLiveSeconds - 缓存element的有效生命期,默认是0.,也就是element存活时间无穷大
 diskSpoolBufferSizeMB 这个参数设置DiskStore(磁盘缓存)的缓存区大小.默认是30MB.每个Cache都应该有自己的一个缓冲区.
l diskPersistent - 在VM重启的时候是否启用磁盘保存EhCache中的数据,默认是false。
l diskExpiryThreadIntervalSeconds - 磁盘缓存的清理线程运行间隔,默认是120秒。每个120s,相应的线程会进行一次EhCache中数据的清理工作
l memoryStoreEvictionPolicy - 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO(先进先出)
 -->

3、在mapper.xml中使用

<mapper namespace="com.gong.mybatis.dao.EmployeeMapper">
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
    ......
</mapper>

4、也可以在其它mapper.xml中引用配置好缓存的mapper

<mapper namespace="com.gong.mybatis.dao.DepartmentMapper">
    <cache-ref namespace="com.gong.mybatis.dao.EmployeeMapper"/>
    ......
</mapper>

最后进行测试二级缓存:

package com.gong.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.gong.mybatis.bean.Department;
import com.gong.mybatis.bean.Employee;
import com.gong.mybatis.dao.EmployeeMapper;
import com.gong.mybatis.mapper.EmployeeMapperDynamicSql;

public class TestMybatis4 {

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(is);
    }

    @Test
    public void test() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        SqlSession openSession2 = sqlSessionFactory.openSession();

        try {
            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            EmployeeMapper mapper2 = openSession2.getMapper(EmployeeMapper.class);
            Employee em = mapper.getEmpById(1);
            System.out.println(em);
            openSession.close();
            Employee em2 = mapper2.getEmpById(1);
            System.out.println(em2);
            openSession.close();
        } finally {
            // TODO: handle finally clause

        }

    }

}

输出:

DEBUG 01-22 11:31:12,291 Configuring ehcache from ehcache.xml found in the classpath: file:/F:/ssmwork/mybatis/bin/ehcache.xml  (ConfigurationFactory.java:132)
DEBUG 01-22 11:31:12,307 Configuring ehcache from URL: file:/F:/ssmwork/mybatis/bin/ehcache.xml  (ConfigurationFactory.java:98)
DEBUG 01-22 11:31:12,307 Configuring ehcache from InputStream  (ConfigurationFactory.java:150)
DEBUG 01-22 11:31:12,417 Ignoring ehcache attribute xmlns:xsi  (BeanHandler.java:271)
DEBUG 01-22 11:31:12,417 Ignoring ehcache attribute xsi:noNamespaceSchemaLocation  (BeanHandler.java:271)
DEBUG 01-22 11:31:12,417 Disk Store Path: D:\44\ehcache  (DiskStoreConfiguration.java:141)
DEBUG 01-22 11:31:12,448 Creating new CacheManager with default config  (CacheManager.java:1036)
DEBUG 01-22 11:31:12,464 propertiesString is null.  (PropertyUtil.java:88)
DEBUG 01-22 11:31:12,479 No CacheManagerEventListenerFactory class specified. Skipping...  (ConfigurationHelper.java:185)
DEBUG 01-22 11:31:13,072 No BootstrapCacheLoaderFactory class specified. Skipping...  (Cache.java:955)
DEBUG 01-22 11:31:13,072 CacheWriter factory not configured. Skipping...  (Cache.java:929)
DEBUG 01-22 11:31:13,072 No CacheExceptionHandlerFactory class specified. Skipping...  (ConfigurationHelper.java:96)
DEBUG 01-22 11:31:13,119 Initialized net.sf.ehcache.store.MemoryStore for com.gong.mybatis.dao.EmployeeMapper  (MemoryStore.java:152)
DEBUG 01-22 11:31:13,181 Using diskstore path D:\44\ehcache  (DiskStorePathManager.java:169)
DEBUG 01-22 11:31:13,181 Holding exclusive lock on D:\44\ehcache\.ehcache-diskstore.lock  (DiskStorePathManager.java:170)
DEBUG 01-22 11:31:13,197 Failed to delete file com%002egong%002emybatis%002edao%002e%0045mployee%004dapper.data  (DiskStorageFactory.java:860)
DEBUG 01-22 11:31:13,197 Failed to delete file com%002egong%002emybatis%002edao%002e%0045mployee%004dapper.index  (DiskStorageFactory.java:860)
DEBUG 01-22 11:31:13,696 Matching data file missing (or empty) for index file. Deleting index file D:\44\ehcache\com%002egong%002emybatis%002edao%002e%0045mployee%004dapper.index  (DiskStorageFactory.java:168)
DEBUG 01-22 11:31:13,712 Failed to delete file com%002egong%002emybatis%002edao%002e%0045mployee%004dapper.index  (DiskStorageFactory.java:860)
DEBUG 01-22 11:31:13,759 Initialised cache: com.gong.mybatis.dao.EmployeeMapper  (Cache.java:1165)
DEBUG 01-22 11:31:13,759 CacheDecoratorFactory not configured for defaultCache. Skipping for ‘com.gong.mybatis.dao.EmployeeMapper‘.  (ConfigurationHelper.java:354)
DEBUG 01-22 11:31:13,907 Cache Hit Ratio [com.gong.mybatis.dao.EmployeeMapper]: 0.0  (LoggingCache.java:62)
DEBUG 01-22 11:31:14,360 ==>  Preparing: select id,last_name lastName,email,gender from tbl_employee where id = ?   (BaseJdbcLogger.java:145)
DEBUG 01-22 11:31:14,391 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145)
DEBUG 01-22 11:31:14,453 <==      Total: 1  (BaseJdbcLogger.java:145)
Employee [id=1, lastName=dema, gender=1, email[email protected], dept=null]
DEBUG 01-22 11:31:14,453 put added 0 on heap  (Segment.java:425)
DEBUG 01-22 11:31:14,469 Cache Hit Ratio [com.gong.mybatis.dao.EmployeeMapper]: 0.5  (LoggingCache.java:62)
Employee [id=1, lastName=dema, gender=1, email[email protected], dept=null]
DEBUG 01-22 11:31:14,484 fault removed 0 from heap  (Segment.java:779)
DEBUG 01-22 11:31:14,484 fault added 0 on disk  (Segment.java:796) 

说明配置成功。

原文地址:https://www.cnblogs.com/xiximayou/p/12228262.html

时间: 2024-10-11 16:24:00

mybatis缓存之整合第三方缓存工具ehcache的相关文章

MyBatis整合第三方缓存

MyBatis缓存做的并不专业,用的是map,但是它给了我们一个接口Cache,我们通过实现这个接口,可以自定义缓存.本例子用的为ehcache ,Hibernate用的也是ehcache缓存技术.        首先我们从官网上下载ehcache的jar包,还需要两个相关的jar.在MyBatis的基础上需要导入的jar包为 ehcache-core-2.6.8.jar  slf4j-api-1.6.1.jar 和 slf4j-log4j12-1.6.2.jar (请忽略版本号).     

sping整合redis,以及做mybatis的第三方缓存

一.spring整合redis Redis作为一个时下非常流行的NOSQL语言,不学一下有点过意不去. 背景:学习Redis用到的框架是maven+spring+mybatis(框架如何搭建这边就不叙述了) 首先在pom里面添加当前所需要的jar包,有下面几个: ------ <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <versi

mybatis0210 mybatis和ehcache缓存框架整合

1.1mybatis和ehcache缓存框架整合 一般不用mybatis来管理缓存而是用其他缓存框架在管理缓存,因为其他缓存框架管理缓存会更加高效,因为别人专业做缓存的而mybatis专业做sql语句的,mybatis二级缓存通过ehcache维护缓存数据. 1.1.1分布缓存 将缓存数据数据进行分布式管理.用户发起请求,首先会根据负载选择不同的服务器,如果用户在服务器1和服务器2都登录过,那么把用户的session分别放在服务器1和服务器2是不行的,所以就把用户的信息放在远程服务器集群中统一管

mybatis配置自带缓存和第三方缓存

参考:https://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html, http://www.yihaomen.com/article/Java/428.htm 许多应用程序,为了提高性能而增加缓存, 特别是从数据库中获取的数据. 在默认情况下,mybatis 的一级缓存是默认开启的.类似于hibernate, 所谓一级缓存,也就是基于同一个sqlsession 的查询语句,即 session 级别的缓存,非全局缓存,或者非二级缓存. 如果要实现 m

Mybatis(1)——映射文件,缓存,整合

映射文件学习过程: 1.增删改查:2.获取自增主键:3.参数处理:单个,多个参数:4.查询返回值处理:5.动态SQl:6.缓存:7.整合Spring 1.增删改查: <!--id 对应里边的方法--> <select id="getStudentById" resultType="mybatis.model.Student"> select * from student where id = #{id} </select> <

Mybatis(五) 延迟加载和缓存机制(一级二级缓存)

踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybatis中resultMap可以实现延迟加载 1.1.查询订单信息,延迟加载用户信息,一对一关系. 1.1.1.开启延迟加载 全局配置文件中,settings标签用来设置全局常量的,这里就用到了. 1 <settings>

SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 整体思路 pomxml中加入Maven依赖 引入applicationContextxml中引入redis配置 创建缓存实现类RedisCache 创建中间类RedisCacheTransfer完成RedisCachejedisConnectionFactory的静态注入 配置文件redisproperties mapper中加入MyBatis二级缓存 Mybatis全局配置 打印Sql日志方便测试 测试代码 项目环境: 在

SpringMVC +Spring + MyBatis + Mysql + Redis(作为二级缓存) 配置

转载:http://blog.csdn.net/xiadi934/article/details/50786293 项目环境: 在SpringMVC +Spring + MyBatis + MySQL.Redis部署在Linux虚拟机. 1.整体思路 参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅) 使用Spring管理Redis连接池 模仿EhcacheCache,实现RedisCache 2.pom.xml中加入Maven依赖 1 <!-- spring-re

Echache整合Spring缓存实例讲解

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要介绍了EhCache,并通过整合Spring给出了一个使用实例. 一.EhCache 介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序