總體思路:使用Hibernate3.2的二級(jí)緩存,解決使用頻率最多的find(Classclz,Objectid)方法的緩存。一、使用Hibernat" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

EasyJWeb+JPA(Hibernate3.2)+Spring2構(gòu)架緩存技

系統(tǒng) 1631 0
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

總體思路:使用Hibernate3.2的二級(jí)緩存,解決使用頻率最多的find(Class clz,Object id)方法的緩存。

一、使用Hibernate3.2的二級(jí)緩存功能,只開(kāi)取針對(duì)id查找實(shí)體的緩存,不開(kāi)啟基于list查詢的緩存。
技術(shù)調(diào)整如下:
1、升級(jí)Spring2的版本號(hào),升級(jí)為2.06,更新spring.jar、spring-aspects.jar、spring-mock.jar,為了使用spring modules中提供的cache功能,增加了spring-modules-cache.jar。以上包已經(jīng)添加到svn中。

2、修改jpa-base.xml中的entityManagerFactory Bean的配置信息,把對(duì)loadTimeWeaver屬性的注入注釋掉。

BEAN class =org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean name ="entityManagerFactory" > BEAN >
property name ="persistenceXmlLocation" value ="classpath:persistence.xml" > property >
property name ="dataSource" ref ="dataSource" > property >
property name ="jpaVendorAdapter" >
BEAN class =org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
<property><span style="COLOR: #0000ff">="database"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="MYSQL"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="showSql"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generateDdl"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #008000"><!--</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><propertyname="loadTimeWeaver"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><bean<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></property></span><span style="COLOR: #008000">--></span><span style="COLOR: #000000"></span></span></span></property>


在persistence.xml文件中,添加如下的配置信息,開(kāi)啟Hibernate的二級(jí)緩存:

property name ="hibernate.cache.provider_class" value ="org.hibernate.cache.EhCacheProvider" > property >
property name ="hibernate.cache.use_query_cache" value ="false" > property > <!--</span><span style="COLOR: #008000">暫時(shí)不開(kāi)querycache</span><span style="COLOR: #008000">-->

3、在src目錄下增加ehcache.xml,設(shè)置cache的配置信息,默認(rèn)情況下可以考慮給一些常用的Entity類設(shè)置一個(gè)單獨(dú)的cache區(qū)域,如下所示:

CACHE name ="com.easyjf.security.Resource" maxelementsinmemory ="1000" eternal ="false" overflowtodisk ="false" memorystoreevictionpolicy ="LFU" > CACHE >
<!--</span><span style="COLOR: #008000">配置信息的說(shuō)明如下:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />缺省緩存配置。CacheManager會(huì)把這些配置應(yīng)用到程序中。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />下列屬性是defaultCache必須的:<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />maxInMemory-設(shè)定內(nèi)存中創(chuàng)建對(duì)象的最大值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />eternal-設(shè)置元素(譯注:內(nèi)存中對(duì)象)是否永久駐留。如果是,將忽略超<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />時(shí)限制且元素永不消亡。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToIdleSeconds-設(shè)置某個(gè)元素消亡前的停頓時(shí)間。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是在一個(gè)元素消亡之前,兩次訪問(wèn)時(shí)間的最大時(shí)間間隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />這只能在元素不是永久駐留時(shí)有效(譯注:如果對(duì)象永恒不滅,則<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />設(shè)置該屬性也無(wú)用)。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />如果該值是0就意味著元素可以停頓無(wú)窮長(zhǎng)的時(shí)間。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />timeToLiveSeconds-為元素設(shè)置消亡前的生存時(shí)間。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也就是一個(gè)元素從構(gòu)建到消亡的最大時(shí)間間隔值。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />這只能在元素不是永久駐留時(shí)有效。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />overflowToDisk-設(shè)置當(dāng)內(nèi)存中緩存達(dá)到maxInMemory限制時(shí)元素是否可寫(xiě)到磁盤(pán)<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />上。<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">-->


4、然后修改Domain對(duì)象,對(duì)于要使用緩存的的Entity,在類聲明前加上如下的標(biāo)簽: BR > @Cache( usage = CacheConcurrencyStrategy .NONSTRICT_READ_WRITE),此處usage的值還需要根據(jù)應(yīng)用情況進(jìn)行必要的調(diào)整。 BR > P > P > 5、暫時(shí)使用ehcache作為Springmodules的cache。在ehcache.xml文件中繼續(xù)配置用于為spring提供方法調(diào)用結(jié)果的緩存。大致如下:

<!--</span><span style="COLOR: #008000">以下是為Spring提供的方法調(diào)用結(jié)果緩存</span><span style="COLOR: #008000">-->

CACHE name ="CMSCache" maxelementsinmemory ="5000" eternal ="false" overflowtodisk ="true" memorystoreevictionpolicy ="LFU" > CACHE >
CACHE name ="ECCache" maxelementsinmemory ="5000" eternal ="false" overflowtodisk ="true" memorystoreevictionpolicy ="LFU" > CACHE >


6、然后在具體的Service類中配置緩存。使用了AOP,需要修改spring的配置文件,比如cms-core.xml中為了給ICmsManageService的get*方法添加結(jié)果緩存,調(diào)整如下:

EHCACHE:PROXY id =cmsManageService>
<bean><span style="COLOR: #0000ff">=com.easyjf.cms.service.impl.CmsManageServiceImpl&gt;</span></bean>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #ff0000">cachename</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="get*"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:CACHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #ff0000">methodname</span><span style="COLOR: #0000ff">="update*"</span><span style="COLOR: #ff0000">cachenames</span><span style="COLOR: #0000ff">="CMSCache"</span><span style="COLOR: #ff0000">when</span><span style="COLOR: #0000ff">="before"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">EHCACHE:FLUSHING</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"></span><span style="COLOR: #800000">EHCACHE:PROXY</span><span style="COLOR: #0000ff">&gt;</span></span></span></span></span></span></span></property>


調(diào)整前對(duì)照:

BEAN class =com.easyjf.cms.service.impl.CmsManageServiceImpl id =cmsManageService>
<property><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsAuthorDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDocDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsDirDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsSourceDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="COLOR: #0000ff"><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="reviewDao"</span><span style="COLOR: #ff0000">ref</span><span style="COLOR: #0000ff">="newsRivewDao"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"></span></span></span></span></span></property>


為了讓Spring配置文件能識(shí)別并處理 EHCACHE:XXX > 這個(gè)標(biāo)簽,需要在beans中進(jìn)行schem聲明,如下所示: BR > 另外在spring配置文件中再增加 EHCACHE:CONFIG configlocation = "classpath:ehcache.xml" > EHCACHE:CONFIG > ,以便Spring能找到Cache配置文件。 EHCACHE:XXX >

BEANS xmlns ="http://www.springframework.org/schema/beans" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop ="http://www.springframework.org/schema/aop" xmlns:tx ="http://www.springframework.org/schema/tx" xmlns:ehcache ="http://www.springmodules.org/schema/ehcache" xsi:schemalocation ="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springmodules.org/schema/ehcachehttp://www.springmodules.org/schema/cache/springmodules-ehcache.xsd" > BEANS >


7、以上只是基本的配置,cache運(yùn)行的具體性能,還需要根據(jù)實(shí)際的數(shù)據(jù)量及并發(fā)量等進(jìn)行更加細(xì)致的調(diào)整。

8、另外EasyJWeb還將會(huì)提供一個(gè)頁(yè)面結(jié)果緩存,直接緩存Action的執(zhí)行結(jié)果,這樣就可以解決訪問(wèn)得最多,屬于嚴(yán)重性能瓶頸的問(wèn)題。比如ec-brand.ejf、index.ejf等。這一功能將在9月15號(hào)前推出。

9、一些必要的頁(yè)面,需要增加靜態(tài)文件生成功能。(逐漸調(diào)整)

注釋:

  由于發(fā)現(xiàn)Spring2.06版本與當(dāng)前我們使用的版本存在一些沖突。而且跟EasyJWeb中的maven混合編譯的時(shí)候存在一些問(wèn)題,因此暫時(shí)取消使用Spring的方法Cache,而只使用Hibernate的Cache及EasyJWeb的緩存配合。EasyJWeb的緩存簡(jiǎn)單機(jī)制已經(jīng)實(shí)現(xiàn),直接在基于AbstractCmdAction的Action中,在要緩存的Command中使用緩存標(biāo)簽@WebCache即可。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1906489


EasyJWeb+JPA(Hibernate3.2)+Spring2構(gòu)架緩存技術(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲免费观看视频 | 国产精品不卡视频 | 91不卡在线 | 日韩精品欧美高清区 | 国产欧美精品午夜在线播放 | 国产毛片精品 | 欧美日韩精品国产一区二区 | 超碰在线97国产 | 日韩欧美不卡在线 | 三级三级三级a三级三级 | 日本一区免费 | 国产精品影视 | 在线视频a | 免费毛片在线视频 | 亚州男人天堂 | 在线免费观看h片 | 欧美一级毛片免费播放器 | 91免费国产精品 | 亚洲日本一区二区三区 | 欧美高清第一页 | 欧美精品在线一区 | 我想看免费毛片 | 欧美色涩 | 国产一级免费视频 | 欧美在线综合 | 久操不卡 | 天天做天天爱天天操 | 李宗瑞国产福利视频一区 | 午夜18禁A片兔费看 四虎影视在线看免费完整版 | 夜夜撸日日操 | 色秀视频在线观看全部 | 猫咪人成免费网站在线观看 | 漂流教室免费观看韩国电影 | 美女求操| 99青青草 | 亚洲成a人片在线观看www流畅 | 亚洲精品福利 | 久久一区二区视频 | 亚洲av毛片一区二区久久 | 免费色网址 | 国内自拍视频在线看免费观看 |