Spring4.3.8 整合Hibernate4.3.11 二级缓存

一、在Bean为sessionFactory的hibetnateProperties中开启二级缓存,配置如下

<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<!-- 使用包扫描模式自动全部持久化类 -->
	<property name="packagesToScan">
		<list>
			<value>com.test.model</value>
		</list>
	</property>
	<property name="hibernateProperties">
		<props>
			<prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
			<prop key="hibernate.hbm2ddl.auto">update</prop>
			<prop key="hibernate.show_sql">true</prop>
			<prop key="hibernate.format_sql">true</prop>
			<!-- 开启二级缓存 -->
			<prop key="hibernate.cache.use_second_level_cache">true</prop>
			<!-- 启动"查询缓存"如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集,必须配置此项-->
			<prop key="hibernate.cache.use_query_cache">true</prop>
			<!-- 配置二级缓存提供商、加载缓存所需配置文件 -->
			<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
			<prop key="hibernate.net.sf.ehcache.configurationResourceName">classpath:ehcache.xml</prop>
				  
		</props>
	</property>
</bean>

二、maven的 pom.xml文件中增加如下

<!-- hibernate4 -->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-core</artifactId>
	<version>4.3.11.Final</version>
</dependency>
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-ehcache</artifactId>
	<version>4.3.11.Final</version>
</dependency>
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>4.3.2.Final</version>
</dependency>

<!-- ehcache缓存 -->
<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache</artifactId>
	<version>2.4.3</version>
</dependency>

三、将ehcache.xml配置文件放到src目录下,本应用所使用ehcache.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false" name="defaultCache">
	
	<!-- 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->
	<diskStore path="java.io.tmpdir/test-ehcache" />
	
	<!-- 设定缓存的默认数据过期策略,自动失效:最后一次访问时间间隔300秒失效,若没有访问过自创建时间600秒失效。 -->
	<defaultCache maxElementsInMemory="10000"
		maxEntriesLocalHeap="1000" 
		eternal="false" 
		timeToIdleSeconds="300"
		timeToLiveSeconds="600" 
		overflowToDisk="true" 
		statistics="true" />
		
</ehcache>

maxElementsInMemory		属性用于指定缓存中最多可放多少个对象。 
eternal					属性指定缓存是否永久有效。  
timeToIdleSeconds		设置对象在失效前的允许闲置时间(单位:秒)。
						仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds		设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。
						仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
overflowToDisk			当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。

四、设置对哪些持久实体类、实体的哪些集合属性启用二级缓存

1、注解方式
在持久实体类中加上注解@Cache(usage = CacheConcurrencyStrategy.READ_WRITE),表明这是需要缓存的实体,其中缓存策略是READ_WRITE,允许更改数据

@Entity  
@Table(name = "user", catalog = "test")  
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)  
public class User implements java.io.Serializable {
    private Integer id;
    private String name;

    //省略所有属性的setter和getter方法,以及在getter方法前的注解

}

2、使用hibernate.cfg.xml文件和xxx.hbm.xml文件

<class name="User" table="User">
   <cache usage="read-write"/>
</class>

五、代码中使用
在代码中使用Query的list等查询方法时,默认是不会自动缓存实体对象的,需要调用Query的方法query.setCacheable(true).list();来进行缓存即可。

 

 

 

转载于:https://my.oschina.net/zhxm/blog/888893

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值