博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate 二级缓存配置
阅读量:6632 次
发布时间:2019-06-25

本文共 3517 字,大约阅读时间需要 11 分钟。

Hibernate的二级缓存功能是通过配置二级缓存插件来实现的,常用的二级缓存插件包括EHCache,OSCache,SwarmCache和JBossCache。本文主要介绍Hibernate缓存插件中EHCache配置。

1、引入EHCache相关jar包

net.sf.ehcache
ehcache-core
2.4.3
org.springframework
spring-context
4.1.4.RELEASE
org.springframework
spring-context-support
4.1.4.RELEASE
org.hibernate
hibernate-ehcache
4.3.8.Final

2、ehcache.xml配置

参数解释:

diskStore   缓存数据文件的存储目录

defaultCache  存的默认数据过期策略

cache  设置具体的命名缓存的数据过期策略

每个命名缓存代表一个缓存区域,命名缓存机制允许用户在每个类以及类的每个集合的粒度上设置数据过期策略;

在defaultCache元素中:

maxElementsInMemory属性设置缓存对象的最大数目;

eternal属性指定是否永不过期,true为不过期,false为过期;

timeToldleSeconds属性设置对象处于空闲状态的最大秒数;

timeToLiveSeconds属性设置对象处于缓存状态的最大秒数;

overflowToDisk属性设置内存溢出时是否将溢出对象写入硬盘;

3、config.properties文件配置

#hibernate confighibernate.dialect = org.hibernate.dialect.MySQLDialecthibernate.show_sql = truehibernate.format_sql = falsehibernate.hbm2ddl.auto = updatehibernate.cache.use_second_level_cache = truehibernate.cache.use_query_cache = truehibernate.cache.provider_configuration_file_resource_path = ehcache.xml#hibernate4 confighibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory#hibernate3 config#hibernate.cache.provider_class = org.hibernate.cache.EhCacheProvider

4、spring-hibernate.xml文件配置,配置到sessionfactory标签当中

${hibernate.dialect}
${hibernate.show_sql}
${hibernate.format_sql}
${hibernate.hbm2ddl.auto}
${hibernate.cache.use_second_level_cache}
${hibernate.cache.region.factory_class}
${hibernate.cache.use_query_cache}
${hibernate.cache.provider_configuration_file_resource_path}

5、添加需要进行二级缓存的实体类注解

6、测试是否成功

Session session = sf.openSession();  session.beginTransaction();List
list = (List
)session.createQuery("from User").setCacheable(true).list();for(User u:list){ System.out.println(u.getName());}session.getTransaction().commit(); session.close(); System.out.println("-----------------分割线------------------");Session session2 = sf.openSession();session2.beginTransaction(); List
list2 = (List
)session2.createQuery("from User").setCacheable(true).list();for(User u:list2){ System.out.println(u.getName());}session2.getTransaction().commit(); session2.close();

说明:

需要使用查询缓存时,需要设置 setCacheable(true)

因为二级缓存是sessionfactory级别的缓存,可以跨域session进行调用,所以检验其是否成功运用了两个session。

第一个session使用查询缓存和list方式,查询出该表的所以实体信息,查询缓存将实体的id集合进行缓存,二级缓存则将其中的实体进行缓存。

第二个session执行同样的查询语句,所以直接从查询缓存中提取第一次查询结果集即实体id的集合,然后再根据实体id从二级缓存中提取实体信息,所以第二个session没有进行任何数据库操作。

执行结果:

二级缓存和查询缓存结果显示均成功。

 

转载于:https://www.cnblogs.com/tianyuchen/p/6305657.html

你可能感兴趣的文章
判断用户浏览器是否是XP SP2的IE6
查看>>
EF架构~对不起Include,是我冤枉你了!
查看>>
Android shell command execute Demo
查看>>
SSO单点登录解决方案
查看>>
什么是分布式系统中的幂等性
查看>>
I.MX6 ar1020 SPI device driver hacking
查看>>
JS面向对象概述
查看>>
WinForm中使用DDE技术(含源码)
查看>>
iOS - OC PList 数据存储
查看>>
一个小时学会MySQL数据库
查看>>
iOS - Mac OS X 终端命令
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.5.10
查看>>
一:解决VirtualBox只能安装32位系统的问题
查看>>
<七>面向对象分析之UML核心元素之包
查看>>
容器生态系统 - 每天5分钟玩转容器技术(2)
查看>>
Excel 当前行高亮
查看>>
ABP Zero 本地化语言的初始化和扩展
查看>>
java只有值传递,不存在引用传递
查看>>
看 nova-scheduler 如何选择计算节点 - 每天5分钟玩转 OpenStack(27)
查看>>
[常微分方程]2014-2015-2第7教学周第1次课讲义 3.2 解的延拓
查看>>