Spring 3.1緩存和配置

我最近在博客中談論有關Spring 3.1及其新的緩存注釋@Cacheable和@CacheEvict 。 與所有Spring功能一樣,您需要進行一定數量的設置,并且通常使用Spring的XML配置文件來完成。 在緩存的情況下,打開@Cacheable@CacheEvict并不容易,因為您要做的就是將以下內容添加到Spring配置文件中:
<cache:annotation-driven />

…以及您的beans XML元素聲明中的適當模式定義:

<beans xmlns='http://www.springframework.org/schema/beans' xmlns:p='http://www.springframework.org/schema/p'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:cache='http://www.springframework.org/schema/cache' xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache.xsd'>

…的主要特點是:

xmlns:cache='http://www.springframework.org/schema/cache'

…和:

http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd

但是,這還不是故事的結局,因為您還需要指定一個緩存管理器和一個緩存實現。 好消息是,如果您熟悉其他Spring組件(例如數據庫事務管理器)的設置,那么這樣做的方式就不足為奇了。

緩存管理器類似乎是實現Spring的org.springframework.cache.CacheManager接口的任何類。 它負責管理一個或多個緩存實施,其中緩存實施實例負責實際緩存數據。

下面的XML示例摘自我最近兩個博客中使用的示例代碼。

<bean id='cacheManager' class='org.springframework.cache.support.SimpleCacheManager'><property name='caches'><set><beanclass='org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean'p:name='employee'/><!-- TODO Add other cache instances in here--></set></property>
</bean>

在上面的配置中,我使用Spring的SimpleCacheManager來管理其ConcurrentMapCacheFactoryBean實例,該實例的緩存實現名為:“ employee ”。

需要注意的重要一點是,您的緩存管理器必須具有cacheManager 。 如果您弄錯了,那么將得到以下異常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.interceptor.CacheInterceptor#0': Cannot resolve reference to bean 'cacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cacheManager' is definedat org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveReference(BeanDefinitionValueResolver.java:328)at org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
populateBean(AbstractAutowireCapableBeanFactory.java:1118)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
:
:  trace details removed for clarity
:at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.
main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named 'cacheManager' is definedat org.springframework.beans.factory.support.DefaultListableBeanFactory.
getBeanDefinition(DefaultListableBeanFactory.java:553)at org.springframework.beans.factory.support.AbstractBeanFactory.
getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)at org.springframework.beans.factory.support.AbstractBeanFactory.
doGetBean(AbstractBeanFactory.java:277)at org.springframework.beans.factory.support.AbstractBeanFactory.
getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.BeanDefinitionValueResolver.
resolveReference(BeanDefinitionValueResolver.java:322)

就像我在上面說的那樣,在我的簡單配置中,整個工作由SimpleCacheManager協調。 根據文檔,這通常是“用于測試或簡單的緩存聲明”。 盡管您可以編寫自己的CacheManager實現,但Spring的專家們為不同情況提供了其他緩存管理器

  • SimpleCacheManager –參見上文。
  • NoOpCacheManager –用于測試,因為它實際上并不緩存任何內容,盡管在這里要小心,因為在不進行緩存的情況下測試代碼可能會在打開緩存時使您絆倒。
  • CompositeCacheManager –允許在單個應用程序中使用多個緩存管理器。
  • EhCacheCacheManager –包裝ehCache實例的緩存管理器。 見http://ehcache.org

對于Spring Profile選擇在任何給定環境中使用哪個緩存管理器似乎是一個很好的用途。 看到:?

  • 在XML Config中使用Spring配置文件
  • 使用Spring Profiles和Java配置

而且,盡管只是為了完整起見,但這只是將內容整理一下,下面是我前兩個博客中使用的完整配置文件:

<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans' xmlns:p='http://www.springframework.org/schema/p'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:cache='http://www.springframework.org/schema/cache' xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd'><!-- Switch on the Caching --><cache:annotation-driven /><!-- Do the component scan path --><context:component-scan base-package='caching' /><!-- simple cache manager --><bean id='cacheManager' class='org.springframework.cache.support.SimpleCacheManager'><property name='caches'><set><bean class='org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean' p:name='employee'/><!-- TODO Add other cache instances in here--></set></property></bean></beans>

正如哥倫波中尉喜歡說:“還有一件事,你知道讓我為這個案件煩惱……”; 好吧,關于緩存管理器,有幾件事讓我感到困擾,例如:

  • 在談論SimpleCacheManager時,Spring的家伙們所說的“對測試或簡單的緩存聲明有用”是什么意思? 您究竟應該何時憤怒地使用它而不是進行測試?
  • 最好編寫自己的CacheManager實現,甚至是Cache實現嗎?
  • 使用EhCacheCacheManager確切優勢是什么?
  • 您真正需要多少時間CompositeCacheManager

我將來可能會研究所有這些……

祝您編程愉快,別忘了分享!

參考:來自Captain Debug's Blog博客的JCG合作伙伴 Roger Hughes的Spring 3.1 Caching and Config 。


翻譯自: https://www.javacodegeeks.com/2012/09/spring-31-caching-and-config.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371302.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

按條件分類_保稅倉儲企業能否同時存儲非保貨物?“倉儲貨物安裝臺分類監管”如何申請?...

保稅倉儲企業能否同時存儲非保貨物呢&#xff1f;保稅和非保貨物是不是真的不能同在一個“屋檐下”呢&#xff1f;哪些企業可以開展“倉儲貨物按狀態分類監管”業務&#xff1f;企業又該如何申請該項業務&#xff1f;本文就對這些問題進行一下梳理。什么是“倉儲貨物按狀態分類…

ZooKeeper的原理(轉)

一、ZooKeeper的角色 領導者&#xff08;Leader&#xff09;&#xff0c;負責進行投票的發起和決議&#xff0c;更新系統狀態。 學習者&#xff08;Learner&#xff09;&#xff0c;包括跟隨者&#xff08;Follower&#xff09;和觀察者&#xff08;Observer&#xff09;&#…

java課堂筆記

轉載于:https://www.cnblogs.com/16-C-kai/p/6567042.html

Spring– DAO和服務層

歡迎來到Spring教程的第三部分。 在這一部分中&#xff0c;我們將繼續編寫Timesheet應用程序&#xff0c;這次我們將實現DAO層&#xff0c;業務服務并編寫一些測試。 在上一部分中&#xff0c;我們定義了GenericDao接口&#xff0c;該接口告訴我們需要對實體執行哪些操作。 現在…

51nod 1907(多項式乘法啟發式合并)

題目&#xff1a; 分析&#xff1a; 對于一個確定的生成子圖&#xff0c;很明顯是在一個連通塊上走&#xff0c;走完了再跳到另一個連通塊上&#xff0c;假設連通塊個數為cnt&#xff0c;那么答案一定是$min(a_{cnt-1},a_cnt,..,a_{n-1})$ 那現在的問題就是如何求出對于原圖而言…

煮飯的機器人作文_公示|“筆隨我心、心由筆動”作文大賽獲獎名單

卡士大昌杯“筆隨我心、心由筆動”獲獎作品開平的咸湯圓滑輪記&#xff0f;我的宅家成長記折疊式小屋&#xff0f;夕陽&#xff0f;包粽子在過去的卡士大昌杯“筆隨我心、心由筆動”作文活動中我們收到了許多優秀投稿經過專業團隊評選得出獲獎選手作品如下主辦方協辦方一等獎《…

BZOJ 4491: 我也不知道題目名字是什么

4491: 我也不知道題目名字是什么 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 278 Solved: 154[Submit][Status][Discuss]Description 給定一個序列A[i]&#xff0c;每次詢問l,r&#xff0c;求[l,r]內最長子串&#xff0c;使得該子串為不上升子串或不下降子串 Input 第一…

Spring-boot中讀取config配置文件的兩種方式

了解過spring-Boot這個技術的&#xff0c;應該知道Spring-Boot的核心配置文件application.properties&#xff0c;當然也可以通過注解自定義配置文件的信息。 Spring-Boot讀取配置文件的方式&#xff1a; 一.讀取核心配置文件信息application.properties的內容 核心配置文件是指…

JavaFX 2 GameTutorial第5部分

介紹 這是與JavaFX 2 Game Tutorial相關的六部分系列的第五部分。 我知道自從我寫關于游戲的博客以來已經很長時間了&#xff0c;但希望您仍然與我在一起。 如果您想回顧一下&#xff0c;請閱讀第1部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4 部分 &#xff0c;以了…

h5是可以一鍵打包小程序的_H5手機網站封裝打包微信小程序并實現分享及微信支付...

手機網站打包小程序教程&#xff0c;生成小程序&#xff0c;網頁版小程序 打包微信小程序&#xff0c;H5封裝成微信小程序。微信小程序開發一般分為2種方式&#xff0c;一種就是原生開發小程序&#xff0c;一種是將手機網站打包成小程序。原生開發小程序成本較高&#xff0c;技…

Hive中的數據庫、表、數據與HDFS的對應關系

1、hive數據庫 我們在hive終端&#xff0c;查看數據庫信息&#xff0c;可以看出hive有一個默認的數據庫default&#xff0c;而且我們還知道hive數據庫對應的是hdfs上面的一個目錄&#xff0c;那么默認的數據庫default到底對應哪一個目錄呢&#xff1f;我們可以通過hive配置文件…

軟件工程概論作業3

轉載于:https://www.cnblogs.com/clueless/p/6568351.html

使用JSF的面向服務的UI

在大型軟件開發項目中&#xff0c;面向服務的體系結構非常常見&#xff0c;因為它提供了可供不同團隊或部門使用的功能接口。 創建用戶界面時&#xff0c;應應用相同的原理。 對于具有開票部門和客戶管理部門等的大型公司&#xff0c;組織結構圖可能如下所示&#xff1a; 如果計…

pocib模板流程圖_各單據流程POCIB

POCIB各階段流程報關流程從廣義上講&#xff0c;報關是指進出境運輸工具負責人、進出境口貨物收發貨人、進出境物品的所有人或者他們的代理人向海關辦理運輸工具、貨物、物品進出境手續及相關手續的全過程。其中&#xff0c;進出境運輸工具負責人、進出口貨物收發貨人、進出境物…

WinDbg 查看靜態變量

有如下Class。若想查看靜態變量內容。因為靜態變量和類綁定&#xff0c;僅需要查看類即可。 namespace ConsoleApplication13 {class Program{public static string public_string "pubstr_static";public static string private_string "pristr_static"…

vue 固定div 滾動_vue.js-div滾動條隱藏但有滾動效果的實現方法

組件被包在一個高度固定的divmounted () {var boDiv document.getElementById(this.id);if(boDiv undefined){return;}var isFirefoxnavigator.userAgent.indexOf("Firefox")if(isFirefox>0){boDiv.addEventListener(DOMMouseScroll, function(event) { //火狐v…

JBoss核心Java Web服務

這篇博客文章涉及Web服務。 好吧&#xff0c;更確切地說&#xff0c;它處理JBoss上的“普通” java Web服務。 這意味著我們將創建一個沒有任何其他框架&#xff08;如CXF&#xff0c;Axis等&#xff09;的Web服務。 JBoss它自己提供對Web服務的支持。 因此&#xff0c;如果您真…

JavaSE--for each

參考&#xff1a;http://blog.csdn.net/yasi_xi/article/details/25482173 學習多線程的時候實例化線程數組而挖掘出來的一直以來的理解誤區 之前一直以為for each 本質上和for循環以及迭代器沒什么區別 1 package foreach;2 3 public class ForeachDemo1 {4 5 public …

[BZOJ1726][Usaco2006 Nov]Roadblocks第二短路

1726: [Usaco2006 Nov]Roadblocks第二短路 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1277 Solved: 607 [Submit][Status][Discuss]Description 貝茜把家搬到了一個小農場&#xff0c;但她常常回到FJ的農場去拜訪她的朋友。貝茜很喜歡路邊的風景&#xff0c;不想那么快…

mysql 5.1.62_MySQL 5.5.62 安裝方法(標準配置版)

1.此安裝方法適用于絕大多數MySQL版本&#xff0c;首先在MySQL官網上下載好所需版本。2.(官網可能不太好找)在我的博客列表中有一篇是MySQL官網下載鏈接&#xff0c;直達下載界面&#xff0c;方便。3.下載。(安裝版 MSI Installer)4.下載安裝包然后雙擊開始安裝選擇同意協議并…