日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容

發(fā)布時間:2023/12/3 javascript 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

spring默認緩存管理器

在這篇文章中,我想向大家展示如何使用Spring的CacheManager,@ Cacheable和JMX批注來緩存和管理Web內(nèi)容的緩存的基礎(chǔ)知識。 想象一下一個網(wǎng)上商店,它從遠程WCMS(Web內(nèi)容管理系統(tǒng))獲取一些內(nèi)容,例如頁眉,頁腳,預(yù)告片,主導(dǎo)航。 提取可以例如經(jīng)由REST服務(wù)發(fā)生。 一些內(nèi)容很少更新,因此出于性能原因,將其緩存在Web應(yīng)用程序中是有意義的。

入門

首先,我們需要一個緩存提供程序。 一個好的緩存提供程序?qū)⑹荅hCache 。 您需要將EhCache 作為依賴項添加到您的項目中。 您還需要配置ehcache.xml,該文件除其他事項外還描述緩存名稱,緩存內(nèi)容的存儲位置和存儲時間。 請參考文檔以了解ehcache.xml的外觀。 EhCache的中心類是net.sf.ehcache.CacheManager。 借助此類,您可以以編程方式向緩存中添加對象或從緩存中刪除任何對象。 可以將對象緩存在內(nèi)存中,磁盤上或其他位置。

Spring框架提供了一個由EhCache支持的CacheManager – org.springframework.cache.CacheManager。 它還提供了@Cacheable批注。 在文檔中 :“顧名思義,@ Cacheable用來劃分可緩存的方法-即,將結(jié)果存儲在緩存中的方法,以便后續(xù)調(diào)用(具有相同參數(shù))時使用緩存中的值返回,而不必實際執(zhí)行該方法。 在最簡單的形式中,注釋聲明要求與被注釋方法關(guān)聯(lián)的緩存名稱。 我們還將使用JMX注釋。 這些是Spring的注釋@ManagedResource和@ManagedOperation。 我們?yōu)槭裁葱枰切?#xff1f; 我們需要它們能夠通過JMX控制臺清除緩存。 為什么? 好吧,例如,基礎(chǔ)數(shù)據(jù)已更改,但緩存尚未過期。 過時的數(shù)據(jù)仍將從緩存中讀取,而不是從本機源中讀取。 用@ManagedResource注釋的Bean將作為JMX Bean公開,通過@ManagedOperation注釋的方法可以通過JMX控制臺執(zhí)行。 我建議使用JMiniX作為簡單的JMX入口點。 只需聲明一個servlet,即可將JMiniX嵌入到webapp中。 還支持參數(shù)化方法,因此您甚至可以為方法的參數(shù)輸入一些實際值,并使用這些值觸發(fā)執(zhí)行。

怎么做…

現(xiàn)在我們準備開發(fā)第一個代碼。 我們需要與遠程后端進行通信的服務(wù),以便從WCMS中獲取各種內(nèi)容。 讓我們用一種方法fetchMainNavigation()展示示例性的基本代碼。 此方法獲取主導(dǎo)航菜單的結(jié)構(gòu),并將該結(jié)構(gòu)轉(zhuǎn)換為DTO對象NavigationContainerDTO(菜單的模型類)。 整個業(yè)務(wù)和技術(shù)邏輯都駐留在bean MainNavigationHandler中。 此邏輯對于此博客文章并不重要。 方法fetchMainNavigation()需要兩個參數(shù):語言環(huán)境(例如,英語或德語)和變量(例如,B2C或B2B shop)。

@Component public class WCMSServiceImpl extends BaseService implements WCMSService {// injection of Spring's CacheManager is needed for @Cacheable@Autowiredprivate CacheManager cacheManager;@Autowiredprivate MainNavigationHandler mainNavigationHandler;...@Override@Cacheable(value = "wcms-mainnavigation",key = "T(somepackage.wcms.WCMSBaseHandler).cacheKey(#root.methodName, #root.args[0], #root.args[1])")public NavigationContainerDTO fetchMainNavigation(Locale lang, String variant) {Object[] params = new Object[0];if (lang != null) {params = ArrayUtils.add(params, lang);}if (variant != null) {params = ArrayUtils.add(params, variant);}return mainNavigationHandler.get("fetchMainNavigation", params);} }

該方法使用Spring的@Cacheable注釋進行注釋。 這意味著,如果返回的對象NavigationContainerDTO在緩存中尚不可用,則將對其進行緩存。 下次提取將從緩存中返回對象,直到緩存過期。 根據(jù)ehcache.xml中的設(shè)置進行緩存。 Spring的CacheManager在類路徑中自動找到EhCache提供程序。 @Cacheable中的value屬性指向緩存名稱。 key屬性指向可以訪問對象的緩存中的鍵。 由于緩存本質(zhì)上是鍵值存儲,因此對緩存方法的每次調(diào)用都需要轉(zhuǎn)換為適合緩存訪問的鍵。 在簡單的情況下,鍵可以是任何靜態(tài)字符串。 在該示例中,我們需要一個動態(tài)鍵,因為該方法具有兩個參數(shù):語言環(huán)境和變量。 幸運的是,Spring支持帶有SpEL表達式(Spring EL表達式)的動態(tài)鍵。 有關(guān)更多詳細信息,請參見表“ Cache SpEL可用的元數(shù)據(jù) ”。 您可以調(diào)用任何生成密鑰的靜態(tài)方法。 我們的表達式T(somepackage.wcms.WCMSBaseHandler).cacheKey(#root.methodName,#root.args [0],#root.args [1])表示我們使用以下三個參數(shù)在類WCMSBaseHandler中調(diào)用靜態(tài)方法cacheKey:方法名稱,第一個和第二個參數(shù)(分別是語言環(huán)境和變量)。 這是我們的密鑰生成器。

public static String cacheKey(String method, Object... params) {StringBuilder sb = new StringBuilder();sb.append(method);if (params != null && params.length > 0) {for (Object param : params) {if (param != null) {sb.append("-");sb.append(param.toString());}}}return sb.toString(); }

讓我們展示處理程序類MainNavigationHandler的外觀。 這只是來自實際項目的簡化示例。

@Component @ManagedResource(objectName = "bean:name=WCMS-MainNavigation",description = "Manages WCMS-Cache for the Main-Navigation") public class MainNavigationHandler extends WCMSBaseHandler<NavigationContainerDTO, Navigation> {@OverrideNavigationContainerDTO retrieve(Objects... params) {// the logic for content retrieving and DTOs mapping is placed here...}@ManagedOperation(description = "Delete WCMS-Cache")public void clearCache() {Cache cache = cacheManager.getCache("wcms-mainnavigation");if (cache != null) {cache.clear();}} }

由于在WCMSBaseHandler中進行了以下注入,因此CacheManager在這里也可用。

@Autowired private CacheManager cacheManager;

@ManagedResource是Spring的JMX批注,以便將bean作為JMX MBean導(dǎo)出并在JMX控制臺中可見。 導(dǎo)出的方法應(yīng)使用@ManagedOperation注釋。 這是方法clearCache(),它從緩存中刪除主導(dǎo)航的所有內(nèi)容。 “所有內(nèi)容”是指NavigationContainerDTO類型的對象。 現(xiàn)在可以將開發(fā)的WCMS服務(wù)注入前端的Bean中。 我已經(jīng)在博客上寫過如何用純HTML構(gòu)建多級菜單并顯示了代碼。 這正是該服務(wù)的主要導(dǎo)航。

還有更多…

應(yīng)該在Spring的XML配置文件中配置JMX注釋的掃描。

<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"><property name="server" ref="mbeanServer"/><property name="assembler" ref="assembler"/><property name="namingStrategy" ref="namingStrategy"/><property name="autodetect" value="true"/> </bean>

可在http(s)://:/ mct / webshop / admin / jmx /下訪問JMiniX的JMX控制臺。單擊clearCache()方法的execute按鈕將觸發(fā)緩存清除。

翻譯自: https://www.javacodegeeks.com/2015/04/caching-of-web-content-with-springs-cache-manager.html

spring默認緩存管理器

總結(jié)

以上是生活随笔為你收集整理的spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。