为Spring集成的Hibernate配置二级缓存
2015-06-18 16:56
423 查看
1、与Session相对的是,SessionFactory也提供了相应的缓存机制。SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存。
SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的副本,而预定义SQL语句是在 Hibernate初始化阶段根据映射元数据推导出来的。SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义 SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。
SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据 的副本,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的二级缓存。
2、需要在beans.xml中开启缓存机制(在sessionFactory配置中添加以下配置):
<property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect<!-- 使用的Mysql5的方言 --> hibernate.hbm2ddl.auto=update<!--是否根据映射源数据,根据数据生成表结构 --> hibernate.show_sql=false<!--是否打印出hibernate中的sql语句 --> hibernate.format_sql=false<!-- 是否对其sql语句进行格式化 --> <!--启用hibernate的外置缓存(二级缓存机制) --> hibernate.cache.use_second_level_cache=true<!-- 开启hibernate二级缓存机制--> hibernate.cache.use_query_cache=false<!-- 设置为flase的意思是,该查询缓存机制其实命中率并不是很高 --> hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider<!--指定缓存机制场景的驱动类 --> </value> </property>
并且引入缓存场景驱动包(我们使用的是ehcache-1.2.3.jar)
3、建立Ehche缓存场景驱动配置文件ehcache.xml(放在类路径下)
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="D:\cache"/><!-- 缓存的对象存放在哪个硬盘上的路劲下 --> <!-- defaultCache节点为缺省的缓存策略 maxElementsInMemory内存中最大允许存在的对象数量 eternal设置缓存中的对象是否永远不过期 overflowToDisk 把溢出的对象存放至硬盘上 timeToIdleSeconds指定缓存对象空闲多长时间就过期,过期的对象会被清除掉 timeToLiveSeconds指定缓存对象的存活时间 diskPersistent当jvm结束时是否持久化对象 diskExpiryThreadIntervalSeconds指定专门用于清除过期对象的监听线程的轮询时间 --> <defaultCache maxElementsInMemory="1000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="180" diskPersistent="false" diskExpiryThreadIntervalSeconds="60"/> </ehcache>
4、之后必须要持久化对象映射文件中配置缓存设置如下所示
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jxau.ruanjian1201.springWeb1.po"> <class name="Person" table="person"> <cache usage="read-write" region="com.jxau.ruanjian1201.springWeb1.po.Person"/> <id name="id" type="integer"> <generator class="native"></generator> </id> <property name="name" length="20" not-null="true" /> </class> </hibernate-mapping>
5、也可以单独对某个持久化对象设置特定的缓存机制
配置如下:
<cache name="com.jxau.ruanjian1201.springWeb1.po.Person" maxElementsInMemory="1000" eternal="false" overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="180" diskPersistent="false" diskExpiryThreadIntervalSeconds="60"/> 上面那个缓存配置是默认的情况下进行。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- 研究表明英美大多数二手硬盘包含以前所有者的数据
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- 分析Cache 在 Ruby China 里面的应用情况
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马