總體思路:使用Hibernate3.2的二級緩存,解決使用頻率最多的find(Class clz,Object id)方法的緩存。
一、使用Hibernate3.2的二級緩存功能,只開取針對id查找實體的緩存,不開啟基于list查詢的緩存。 技術調整如下: 1、升級Spring2的版本號,升級為2.06,更新spring.jar、spring-aspects.jar、spring-mock.jar,為了使用spring modules中提供的cache功能,增加了spring-modules-cache.jar。以上包已經添加到svn中。
2、修改jpa-base.xml中的entityManagerFactory Bean的配置信息,把對loadTimeWeaver屬性的注入注釋掉。
在persistence.xml文件中,添加如下的配置信息,開啟Hibernate的二級緩存:
3、在src目錄下增加ehcache.xml,設置cache的配置信息,默認情況下可以考慮給一些常用的Entity類設置一個單獨的cache區域,如下所示:
4、然后修改Domain對象,對于要使用緩存的的Entity,在類聲明前加上如下的標簽:<BR>@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),此處usage的值還需要根據應用情況進行必要的調整。<BR> </P><P>5、暫時使用ehcache作為Spring modules的cache。在ehcache.xml文件中繼續配置用于為spring提供方法調用結果的緩存。大致如下:
6、然后在具體的Service類中配置緩存。使用了AOP,需要修改spring的配置文件,比如cms-core.xml中為了給ICmsManageService的get*方法添加結果緩存,調整如下:
調整前對照:
為了讓Spring配置文件能識別并處理<EHCACHE:XXX>這個標簽,需要在beans中進行schem聲明,如下所示:<BR>另外在spring配置文件中再增加<EHCACHE:CONFIG configlocation="classpath:ehcache.xml"></EHCACHE:CONFIG>,以便Spring能找到Cache配置文件。</EHCACHE:XXX>
7、以上只是基本的配置,cache運行的具體性能,還需要根據實際的數據量及并發量等進行更加細致的調整。
8、另外EasyJWeb還將會提供一個頁面結果緩存,直接緩存Action的執行結果,這樣就可以解決訪問得最多,屬于嚴重性能瓶頸的問題。比如ec-brand.ejf、index.ejf等。這一功能將在9月15號前推出。
9、一些必要的頁面,需要增加靜態文件生成功能。(逐漸調整)
注釋:
由于發現Spring2.06版本與當前我們使用的版本存在一些沖突。而且跟EasyJWeb中的maven混合編譯的時候存在一些問題,因此暫時取消使用Spring的方法Cache,而只使用Hibernate的Cache及EasyJWeb的緩存配合。EasyJWeb的緩存簡單機制已經實現,直接在基于AbstractCmdAction的Action中,在要緩存的Command中使用緩存標簽@WebCache即可。