在 JPA、Hibernate 和 Spring 中配置 Ehcache 緩存


 jpa, hibernate 和 spring 時配置 ehcache 二級緩存的步驟。

緩存配置

首先在 persistence.xml 配置文件中添加下面內容:

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.generate_statistics" value="true"/>

 

 

EHCache 還需要一些獨立的配置,你需要在類路徑中放置 ehcache.xml ,文件內容如下:

<cache name="samples.Employee"
           maxElementsInMemory="2000"
           eternal="false"
           timeToIdleSeconds="1800"
           timeToLiveSeconds="3600"
           overflowToDisk="false"/>

  

實體配置

在映射實體類中聲明注解

@org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)

 

現在,你已經為一個對象配置了緩存,例如通過類似 loadById 之類的方法就可以使緩存生效,但當需要一些查詢或者使用標准查詢對象時默認是不使用緩存的,因此我們需要在代碼上做一些處理。

查詢緩存

為了啟用查詢緩存,我們需要兩個配置,一個是啟用 hibernate.cache.user_query_cache,另外一個是設置查詢緩存:

Query query = entityManager.createQuery("from " + Employee.class.getName());
query.setHint("org.hibernate.cacheable", true);
return query.getResultList();

  

通過統計來確保緩存起效

執行下面的代碼可以打印緩存的統計信息

EntityManagerFactoryInfo entityManagerFactoryInfo =
(EntityManagerFactoryInfo) applicationContext.getBean("entityManagerFactory");
EntityManagerFactory emf = entityManagerFactoryInfo.getNativeEntityManagerFactory();
EntityManagerFactoryImpl emfImp = (EntityManagerFactoryImpl)emf;
System.out.println(emfImp.getSessionFactory().getStatistics());

  

別忘了,上述代碼需要在 persistence.xml 中啟用 hibernate.generate_statistics


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM