`

Hibernate二级缓存配置:

阅读更多

http://chenhongbin007.blog.163.com/blog/static/3406992120094661950804/

 

转之方便自用。

 

Java代码  收藏代码
  1. 二级缓存配置:      
  2.   
  3.      
  4.   
  5. 1首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:      
  6.   
  7. <property name="hibernate.cache.use_second_level_cache">true</property>     
  8.   
  9.      
  10.   
  11. 2Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个      
  12.   
  13.    缓存工具。如下配置指定Hibernate使用EhCache缓存工具。      
  14.   
  15. <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>     
  16.   
  17.      
  18.   
  19. 3Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象,      
  20.   
  21. 在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:      
  22.   
  23. <cache usage="read-only"/>     
  24.   
  25.      
  26.   
  27. usage="read-only"是“只读”缓存策略。      
  28.   
  29.      
  30.   
  31. 注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!!      
  32.   
  33. 这个<cache>标签放在哪些<class>标签下面,就说明会对这些类的对象进行缓存      
  34.   
  35.      
  36.   
  37. 4对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,      
  38.   
  39.    而不需要使用<cache>标签来指定。如:      
  40.   
  41.    在hibernate.cfg.xml中添加如下配置:      
  42.   
  43.    <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" />     
  44.   
  45.         
  46.   
  47.    注意,这个<class-cache>标签必须放在<mapping>标签的后面!!    
  48.   
  49.   
  50.   
  51. --------------------------------------------------------------------------------  
  52.   
  53.   
  54.   
  55.   
  56.   
  57.   
  58.   
  59. 1、首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:   
  60.   
  61. <?xml version="1.0" encoding="UTF-8"?>   
  62.   
  63. <ehcache>   
  64.   
  65.  <diskStore path="java.io.tmpdir"/>   
  66.   
  67.   <defaultCache   
  68.   
  69.    maxElementsInMemory="10000" <!-- 缓存最大数目 -->   
  70.   
  71.    eternal="false" <!-- 缓存是否持久 -->   
  72.   
  73.    overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->   
  74.   
  75.    timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->   
  76.   
  77.    timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->   
  78.   
  79.    diskPersistent="false"   
  80.   
  81.    diskExpiryThreadIntervalSeconds= "120"/>   
  82.   
  83. </ehcache>   
  84.   
  85.   2、在Hibernate配置文件中设置:   
  86.   
  87. <!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->   
  88.   
  89. <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>   
  90.   
  91.  <!-- 是否使用查询缓存 -->   
  92.   
  93.  <property name="hibernate.cache.use_query_cache"true</property>   
  94.   
  95.   如果使用spring调用Hibernate的sessionFactory的话,这样设置:   
  96.   
  97.   <!--HibernateSession工厂管理 -->   
  98.   
  99.    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  100.   
  101.    <property name="dataSource">   
  102.   
  103.     <ref bean="datasource" />   
  104.   
  105.    </property>   
  106.   
  107.    <property name="hibernateProperties">   
  108.   
  109.    <props>   
  110.   
  111.     <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>   
  112.   
  113.     <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>   
  114.   
  115.     <prop key="hibernate.show_sql"true</prop>   
  116.   
  117.     <prop key="hibernate.cache.use_query_cache"true</prop>   
  118.   
  119.     <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>   
  120.   
  121.    </props>   
  122.   
  123.  </property>   
  124.   
  125.  <property name="mappingDirectoryLocations">   
  126.   
  127.   <list>   
  128.   
  129.    <value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value>   
  130.   
  131.   </list>   
  132.   
  133.  </property>   
  134.   
  135. </bean>   
  136.   
  137.   说明一下:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用 findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置   
  138.   
  139. hibernate.cache.use_query_cache true 才行   
  140.   
  141.   3、在Hbm文件中添加<cache usage="read-only"/>   
  142.   
  143.   4、如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性   
  144.   
  145.   5、实践出真知,给一段测试程序,如果成功的话第二次查询时不会读取数据库   
  146.   
  147. package cn.rmic.hibernatesample;   
  148.   
  149. import java.util.List;   
  150.   
  151. import org.hibernate.CacheMode;   
  152.   
  153. import org.hibernate.Criteria;   
  154.   
  155. import org.hibernate.Query;   
  156.   
  157. import org.hibernate.Session;   
  158.   
  159. import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory;   
  160.   
  161. import cn.rmic.manager.po.Resources;   
  162.   
  163. public class testCacheSelectList ...{   
  164.   
  165.  /** *//**  
  166.  
  167.  * @param args  
  168.  
  169.  */   
  170.   
  171.  public static void main(String[] args) ...{   
  172.   
  173.   // TODO Auto-generated method stub   
  174.   
  175.   Session s=HibernateSessionFactory.getSession();   
  176.   
  177.   Criteria c=s.createCriteria(Resources.class);   
  178.   
  179.   c.setCacheable(true);   
  180.   
  181.   List l=c.list();   
  182.   
  183.   // Query q=s.createQuery("From Resources r")   
  184.   
  185.   // .setCacheable(true)   
  186.   
  187.   // .setCacheRegion("frontpages") ;   
  188.   
  189.   // List l=q.list();   
  190.   
  191.   Resources resources=(Resources)l.get(0);   
  192.   
  193.   System.out.println("-1-"+resources.getName());   
  194.   
  195.   HibernateSessionFactory.closeSession();   
  196.   
  197.   try ...{   
  198.   
  199.    Thread.sleep(5000);   
  200.   
  201.   } catch (InterruptedException e) ...{   
  202.   
  203.    // TODO Auto-generated catch block   
  204.   
  205.    e.printStackTrace();   
  206.   
  207.   }   
  208.   
  209.   s=HibernateSessionFactory.getSession();   
  210.   
  211.   c=s.createCriteria(Resources.class);   
  212.   
  213.   c.setCacheable(true);   
  214.   
  215.   l=c.list();   
  216.   
  217.   // q=s.createQuery("From Resources r").setCacheable(true)   
  218.   
  219.   // .setCacheRegion("frontpages");   
  220.   
  221.   // l=q.list();   
  222.   
  223.   resources=(Resources)l.get(0);   
  224.   
  225.   System.out.println("-2-"+resources.getName());   
  226.   
  227.   HibernateSessionFactory.closeSession();   
  228.   
  229.  }   
  230.   
  231. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics