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