javascript
8 -- 深入使用Spring -- 5...1 启用Spring缓存
8.5.1 啟用Spring緩存
Spring配置文件專門為緩存提供了一個cache:命名空間,為了啟用Spring緩存,需要在配置文件中導(dǎo)入cache:命名空間。
導(dǎo)入cache:命名空間之后,啟用Spring緩存還要兩步:
① 在Spring配置文件中添加<cache:annotation-driven cache-manager="緩存管理器ID"/>,該元素指定Spring根據(jù)注解來啟用Bean級別或方法級別的緩存。
② 針對不同的緩存實現(xiàn)配置對應(yīng)的緩存管理器。
第1步使用<cache:annotation-driven.../>元素時可通過cache-manager顯式指定容器中緩存管理器的ID;該屬性的默認(rèn)值為cacheManager ------ 也就是說,如果將容器中緩存管理器的ID設(shè)為cacheManager,則可省略<cache:annotation-driven.../>的cache-manager屬性。
第2步由于Spring底層可使用大部分主流的Java緩存工具,而不同的緩存工具所需的配置也不同,因此略微有點麻煩。
以Spring內(nèi)置的緩存實現(xiàn)和EhCache為例來介紹Spring緩存的配置:
1.Spring 內(nèi)置緩存實現(xiàn)的配置
Spring內(nèi)置的緩存實現(xiàn)只是一種內(nèi)存中的緩存,并非真正的緩存實現(xiàn),因此通常只能用于簡單的測試環(huán)境,不建議在實際項目中使用Spring內(nèi)置的緩存實現(xiàn)。
Spring內(nèi)置的緩存實現(xiàn)使用SimpleCacheManager作為緩存管理器,使用SimpleCacheManager配置緩存非常簡單,直接在Spring容器中配置該Bean,然后通過<property.../>驅(qū)動該緩存管理器執(zhí)行setCaches()方法來設(shè)置緩存區(qū)即可。
SimpleCacheManager是一種內(nèi)存中的緩存區(qū),底層直接使用了JDK的ConcurrentMap來實現(xiàn)緩存,SimpleCacheManager使用了ConcurrentMapCacheFactoryBean作為緩存區(qū),每個ConcurrentMapCacheFactoryBean配置一個緩存區(qū)。
配置Spring內(nèi)置緩存的緩存管理器DEMO:
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd語義約束 --> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"xmlns:cache="http://www.springframework.org/schema/cache"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:P="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 使用SimpleCacheManager配置Spring內(nèi)置的緩存管理器 --><bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"><!-- 配置緩存區(qū) --><property name="caches"><set><!-- 使用ConcurrentMapCacheFactoryBean配置緩存區(qū) --><bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"><!-- 為緩存區(qū)指定名字 --><property name="name" value="default"/></bean><bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"><!-- 為緩存區(qū)指定名字 --><property name="name" value="users"/></bean></set></property></bean></beans>配置文件使用SimpleCacheManager配置了Spring內(nèi)置的緩存管理器,并為該緩存管理器配置了兩個緩存區(qū):default和users ------ 這些緩存區(qū)的名字很重要,因為后面使用注解驅(qū)動緩存時需要根據(jù)緩存區(qū)的名字來將緩存放入指定緩存區(qū)內(nèi)。
提示:
在實際的應(yīng)用中,開發(fā)者可以根據(jù)自己的需要,配置更多的緩存區(qū),一般來說,應(yīng)用有多少個組件需要緩存,程序就應(yīng)該配置多少個緩存區(qū)。
2.EhCache緩存實現(xiàn)的配置
在配置EhCache緩存實現(xiàn)之前,首先需要將EhCache緩存的JAR包添加到項目的類加載路徑中。
ehcache-core-x.x.x.jar : 是EhCache的核心JAR包;
slf4j-api-x.x.x.jar : 是該緩存工具所使用的日志工具;
為了使用EhCache,同樣需要在應(yīng)用的類加載路徑下添加一個ehcache.xml配置文件。
ehcache.xml :?
<?xml version="1.0" encoding="UTF-8"?> <ehcache><diskStore path="java.io.tmpdir" /><!-- 配置默認(rèn)的緩存區(qū) --><defaultCache maxElementsInMemory="10000" eternaml="false"timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /><!-- 配置名為users的緩存區(qū) --><cache name="users" maxElementsInMemory="10000" eternal="false"overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" /> </ehcache>其中第一個用于配置匿名的、默認(rèn)的緩存區(qū),第二個才是配置了名為users的緩存區(qū)。如果需要,完全可以將<cache.../>元素復(fù)制多個,用于配置多個有名字的緩存區(qū)。這些緩存區(qū)的名字同樣很重要,后面使用注解驅(qū)動緩存時需要根據(jù)緩存區(qū)的名字來將緩存數(shù)據(jù)放入指定緩存區(qū)內(nèi)。
Spring使用EhCacheCacheManager作為EhCache緩存實現(xiàn)的緩存管理器,因此只要該對象配置在Spring容器中,它就可作為緩存管理器使用,但EhCacheCacheManager底層需要依賴一個net.sf.ehcache.CacheManager作為實際的緩存管理器。
為了將net.sf.ehcache.CacheManager納入Spring容器的管理之下,Spring提供了EhCacheManagerFactoryBean工廠Bean,該工廠Bean實現(xiàn)了FactoryBean<CacheManager>接口。當(dāng)程序把EhCacheManagerFactoryBean部署在Spring容器中,并通過Spring容器請求獲取工廠Bean時,實際返回的是它的產(chǎn)品 ------ 也就是CacheManager對象。因此,為了在Spring配置文件中配置基于EhCache的緩存管理器,只要增加如下兩段配置即可:
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd語義約束 --> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"xmlns:cache="http://www.springframework.org/schema/cache"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:P="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 配置EhCache的CacheManager通過configLocation指定ehcache.xml文件的位置 --><bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><property name="configLocation" value="classpath:ehcache.xml"/><property name="shared" value="false"/></bean><!-- 配置基于EhCache的緩存管理器 --><bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"><property name="cacheManager" ref="ehCacheManager"/></bean></beans>Spring配置文件中,第一個Bean是一個工廠Bean,它用于配置EhCache的CacheManager;第二個Bean才是為Spring緩存配置的基于EhCache的緩存管理器,該緩存管理器需要依賴于CacheManager,因此程序?qū)⒌谝粋€Bean注入到第二個Bean中?
配置好人一種緩存管理器之后,接下來就可使用注解來驅(qū)動Spring將緩存數(shù)據(jù)存入指定緩存區(qū)了。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/ClassNotFoundException/p/6486362.html
總結(jié)
以上是生活随笔為你收集整理的8 -- 深入使用Spring -- 5...1 启用Spring缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj 2809 Apio2012 d
- 下一篇: 实时监听 input输入框值的变化 并响