spring4.x hibernate4.x 整合 ehcache 注解 annotate

来源:互联网 发布:123d design mac 云盘 编辑:程序博客网 时间:2024/05/10 06:47

spring4.x hibernate4.x 整合 ehcache 基于 注解 annotate

废话不说 直接贴源码链接 : https://git.oschina.net/alexgaoyh/alexgaoyh.git

使用 ehcache 来提高系统的性能,现在用的非常多, 也支持分布式的缓存,在hibernate 当中作为二级缓存的实现产品,可以提高查询性能。

pom.xml

<dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-ehcache</artifactId>    <version>4.1.6.Final</version>    </dependency>

在项目的 src 下面添加 ehcache 的配置文件 ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">  <!--  Subdirectories can be specified below the property e.g. java.io.tmpdir/one  -->  <diskStore path="java.io.tmpdir"/>  <!--  Mandatory Default Cache configuration. These settings will be applied to caches  created programmtically using CacheManager.add(String cacheName)  -->  <defaultCache     maxElementsInMemory="10000"     eternal="false"     timeToIdleSeconds="120"     timeToLiveSeconds="120"     overflowToDisk="true"     maxElementsOnDisk="10000000"     diskPersistent="false"     diskExpiryThreadIntervalSeconds="120"     memoryStoreEvictionPolicy="LRU"   />    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache"       maxElementsInMemory="5000"        eternal="true"        overflowToDisk="true" />  <cache name="org.hibernate.cache.internal.StandardQueryCache"       maxElementsInMemory="10000"        eternal="false"        timeToLiveSeconds="120"       overflowToDisk="true" />    <!--  java文件注解查找cache方法名的策略:如果不指定java文件注解中的region="ehcache.xml中的name的属性值",   则使用name名为com.lysoft.bean.user.User的cache(即类的全路径名称), 如果不存在与类名匹配的cache名称, 则用 defaultCache  如果User包含set集合, 则需要另行指定其cache  例如User包含citySet集合, 则也需要  添加配置到ehcache.xml中  -->  <cache name="javaClassName" maxElementsInMemory="2000" eternal="false"        timeToIdleSeconds="120" timeToLiveSeconds="120"       overflowToDisk="true" />      </ehcache>

在 spring  集成 hibernate  的配置文件中,添加如下配置

<!-- 开启查询缓存 --><prop key="hibernate.cache.use_query_cache">true</prop><!-- 开启二级缓存 --><prop key="hibernate.cache.use_second_level_cache">true</prop><!-- 高速缓存提供程序 --> <!-- 由于spring也使用了Ehcache, 保证双方都使用同一个缓存管理器 --><prop key="hibernate.cache.region.factory_class">     org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>

Spring 也使用 ehcache,  所以也需要在 spring 配置文件中添加 ehcache 的配置

<!-- cacheManager, 指定ehcache.xml的位置 -->   <bean id="cacheManagerEhcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">    <property name="configLocation">        <value>classpath:ehcache.xml</value>        </property>        <!-- 由于hibernate也使用了Ehcache, 保证双方都使用同一个缓存管理器 -->        <property name="shared" value="true"/>    </bean>

在类中定义:

@Entity  @Table(name = "t_user")  @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region="javaClassName")  public class User implements Serializable {  }

默认情况下二级缓存只会对load get 之类的方法缓存, 想list iterator 之类的方法也使用缓存 必须跟查询缓存一起使用, 重写查询方法 

.setCacheable(true)

criteria.setCacheable(true).list();

之后进行验证

0 0
原创粉丝点击