spring使用ehcache實(shí)現(xiàn)頁(yè)面緩存示例
如果將應(yīng)用的結(jié)構(gòu)分為"page-filter-action-service-dao-db",那page層就是最接近用戶(hù)的一層,一些特定的頁(yè)面如果在這里做緩存,之后用戶(hù)的請(qǐng)求在filter就會(huì)結(jié)束了,不用再走后面的"action-service-dao-db",很大程度的節(jié)省了服務(wù)器的壓力,也加快了頁(yè)面響應(yīng)。
在系統(tǒng)中可以對(duì)一些訪(fǎng)問(wèn)量特別大、數(shù)據(jù)更新較少的頁(yè)面設(shè)置頁(yè)面緩存,比如首頁(yè)、一些瀏覽頁(yè)和統(tǒng)計(jì)頁(yè),設(shè)置成幾分鐘更新一次緩存。
spring的ehcache頁(yè)面緩存是用filter的原理實(shí)現(xiàn)的,ehcache-web包中的"SimplePageCachingFilter"過(guò)濾器提供了簡(jiǎn)單的頁(yè)面緩存功能,如果有特殊需要我們也可以繼承這個(gè)類(lèi)實(shí)現(xiàn)自己的過(guò)濾器。
下面舉栗子:
一、添加jar包引用
修改pom.xml文件,加入:
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-web</artifactId> <version>2.0.4</version> </dependency>
二、修改配置文件
1、修改web.xml文件,加入兩個(gè)自己的filter:
<!-- 頁(yè)面緩存過(guò)濾器 -->
<!-- 添加緩存 -->
<filter>
<filter-name>testPageAddCachingFilter</filter-name>
<filter-class>org.xs.demo1.TestPageCachingFilter</filter-class>
<init-param>
<param-name>cacheName</param-name>
<param-value>testPageCache</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>testPageAddCachingFilter</filter-name>
<url-pattern>/hello/list</url-pattern>
<url-pattern>/hello/list2</url-pattern>
<url-pattern>/hello/view/*</url-pattern>
</filter-mapping>
<!-- 清除緩存 -->
<filter>
<filter-name>testPageRemoveCachingFilter</filter-name>
<filter-class>org.xs.demo1.TestPageRemoveCachingFilter</filter-class>
<init-param>
<param-name>cacheName</param-name>
<param-value>testPageCache</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>testPageRemoveCachingFilter</filter-name>
<url-pattern>/hello/update/*</url-pattern>
<url-pattern>/hello/delete/*</url-pattern>
</filter-mapping>
2、修改ehcache-context.xml文件,加入"testPageCache"緩存實(shí)例名(一定要加,不然tomcat啟動(dòng)時(shí)filter會(huì)報(bào)錯(cuò),提示找不到)
<cache name="testPageCache" maxEntriesLocalHeap="10000" maxEntriesLocalDisk="100000" overflowToDisk="true" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" />
三、增加filter類(lèi)
1、增加添加緩存過(guò)濾器
package org.xs.demo1;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter;
public class TestPageCachingFilter extends SimplePageCachingFilter {
@Override
protected CacheManager getCacheManager() {
return ((CacheManager)ContextUtils.getBean("ehcacheManager"));
}
}
繼承SimplePageCachingFilter類(lèi)的原因是要自己創(chuàng)建CacheManager,不然會(huì)是自動(dòng)創(chuàng)建,默認(rèn)會(huì)去根目錄找"ehcache.xml",和我們已有的配置不符。
2、增加清除緩存過(guò)濾器
package org.xs.demo1;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.ehcache.Ehcache;
public class TestPageRemoveCachingFilter extends TestPageCachingFilter {
@Override
protected void doFilter(final HttpServletRequest httpRequest, final HttpServletResponse httpResponse, final FilterChain chain) throws ServletException, IOException {
Ehcache ehcache = getCacheManager().getEhcache(getCacheName());
//清除緩存
ehcache.removeAll();
//請(qǐng)求繼續(xù)執(zhí)行
chain.doFilter(httpRequest, httpResponse);
}
}
四、運(yùn)行測(cè)試
第一次訪(fǎng)問(wèn)"http://localhost:8080/demo1/hello/list2"地址,會(huì)進(jìn)入Controller中的斷點(diǎn):

第二次訪(fǎng)問(wèn)就不會(huì)進(jìn)入斷點(diǎn)了,頁(yè)面瞬間加載好
點(diǎn)擊"刪除"按鈕,會(huì)進(jìn)入TestPageRemoveCachingFilter過(guò)濾器的斷點(diǎn):
之后再訪(fǎng)問(wèn)list2又會(huì)重新進(jìn)入Controller中的斷點(diǎn)
實(shí)例代碼地址:spring-ehcache_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC使用@PathVariable接收參數(shù)過(guò)程解析
這篇文章主要介紹了SpringMVC使用@PathVariable接收參數(shù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
springboot開(kāi)發(fā)flowable定時(shí)任務(wù)問(wèn)題
這篇文章主要介紹了springboot開(kāi)發(fā)flowable定時(shí)任務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
基于springboot bean的實(shí)例化過(guò)程和屬性注入過(guò)程
這篇文章主要介紹了基于springboot bean的實(shí)例化過(guò)程和屬性注入過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
JAVA使用quartz添加定時(shí)任務(wù),并依賴(lài)注入對(duì)象操作
這篇文章主要介紹了JAVA使用quartz添加定時(shí)任務(wù),并依賴(lài)注入對(duì)象操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
微信公眾號(hào) 網(wǎng)頁(yè)授權(quán)登錄及code been used解決詳解
這篇文章主要介紹了微信公眾號(hào) 網(wǎng)頁(yè)授權(quán)登錄及code been used解決詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Java中CopyOnWriteArrayList的使用解析
這篇文章主要介紹了Java中CopyOnWriteArrayList的使用解析,CopyOnWriteArrayList適合使用在讀操作遠(yuǎn)遠(yuǎn)大于寫(xiě)操作的場(chǎng)景里,比如緩存,它不存在擴(kuò)容的概念,每次寫(xiě)操作都要復(fù)制一個(gè)副本,在副本的基礎(chǔ)上修改后改變Array引用,需要的朋友可以參考下2023-12-12
如何為Spring Cloud Gateway加上全局過(guò)濾器
這篇文章主要介紹了如何為Spring Cloud Gateway加上全局過(guò)濾器,幫助大家更好得理解和學(xué)習(xí)使用Gateway,感興趣的朋友可以了解下2021-03-03

