为Spring集成的Hibernate配置二级缓存

本文介绍了如何为Spring集成的Hibernate配置二级缓存。二级缓存分为SessionFactory的内置缓存和外置缓存,其中外置缓存可配置为内存或硬盘。开启缓存机制需要在beans.xml中进行配置,并引入缓存驱动包,如ehcache。接着,需要创建ehcache.xml配置文件,并在持久化对象映射文件中指定缓存设置。
摘要由CSDN通过智能技术生成

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"/>
上面那个缓存配置是默认的情况下进行。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值