Spring如何基于注解配置使用ehcache
使用ehcache-spring-annotations使得在工程中簡單配置即可使用緩存
下載地址:http://code.google.com/p/ehcache-spring-annotations/
需要的jar包,首先需要的是我們之前做SpringMVC時(shí)的各個(gè)Spring的jar包
然后需要把ehcache-spring-annotations-1.2.0文件夾內(nèi)lib內(nèi)的,非spring的jar加進(jìn)去,因?yàn)槲覀円呀?jīng)增加了我們版本的spring
然后還需要?jiǎng)討B(tài)代理的cglib包
在spring主配置文件中配置ehcache注解的使用:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
<ehcache:annotation-driven cache-manager="ehCacheManager" />
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
<bean id="sacheService" class="test.CacheService"></bean>
</beans>
配置緩存配置文件ehcache.xml,改文件放在SRC下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<diskStore path="java.io.tmpdir" />
<defaultCache eternal="false" maxElementsInMemory="1000"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
<cache name="testCache" eternal="false" maxElementsInMemory="100"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="300" memoryStoreEvictionPolicy="LRU" />
</ehcache>
CacheService是示例類,代碼如下:
package test;
import java.util.Date;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.googlecode.ehcache.annotations.Cacheable;
import com.googlecode.ehcache.annotations.TriggersRemove;
public class CacheService{
@SuppressWarnings("deprecation")
@Cacheable(cacheName = "testCache")
public String getName(String code){
System.out.println("查詢編號(hào):" + code);
return new Date().toLocaleString() + "-->" + code;
}
@SuppressWarnings("deprecation")
@Transactional(propagation = Propagation.REQUIRED)
public String update(String code){
System.out.println("更新編號(hào):" + code);
return new Date().toLocaleString() + "-->" + code;
}
@TriggersRemove(cacheName="testCache",removeAll=true)
public void flush(){
System.out.println("情況緩存");
System.out.println("Processing testFlushing");
}
}
改類包含根據(jù)參數(shù)獲取緩存值,更新緩存,情況緩存,都是使用注解標(biāo)簽實(shí)現(xiàn)。
Action類需要改動(dòng)一下,代碼如下:
package test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
// http://localhost:8080/spring/hello.do?key=1&code=java
@org.springframework.stereotype.Controller
public class HelloController{
private CacheService sacheService;
@SuppressWarnings("deprecation")
@RequestMapping("/hello.do")
public String hello(HttpServletRequest request,HttpServletResponse response){
String key = request.getParameter("key");
if("1".equals(key)){
request.setAttribute("message", sacheService.getName(request.getParameter("code")));
}else if("2".equals(key)){
request.setAttribute("message", sacheService.update(request.getParameter("code")));
}else{
sacheService.flush();
request.setAttribute("message", sacheService.getName(request.getParameter("code")));
}
return "hello";
}
public CacheService getSacheService() {
return sacheService;
}
@Autowired
public void setSacheService(CacheService sacheService) {
this.sacheService = sacheService;
}
}
根據(jù)key做不同的操作,然后分別訪問以下幾個(gè)路徑,為了方便看效果和學(xué)習(xí),我把工程代碼放到了附件:
第一次沒有緩存
http://localhost:8080/spring/hello.do?key=1&code=java
讀取緩存
http://localhost:8080/spring/hello.do?key=1&code=java
更新緩存
http://localhost:8080/spring/hello.do?key=2&code=java
讀取最新緩存
http://localhost:8080/spring/hello.do?key=1&code=java
情況緩存
http://localhost:8080/spring/hello.do?key=3
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案
- SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)
- Spring @Cacheable redis異常不影響正常業(yè)務(wù)方案
- SpringCache之 @CachePut的使用
- Spring Cache整合Redis實(shí)現(xiàn)方法詳解
- SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的原理解析
- Spring cache整合redis代碼實(shí)例
- Spring Cache擴(kuò)展功能實(shí)現(xiàn)過程解析
- Springboot整合GuavaCache緩存過程解析
- Spring Cache相關(guān)知識(shí)總結(jié)
相關(guān)文章
Spring cloud 查詢返回廣告創(chuàng)意實(shí)例代碼
在本篇文章里小編給大家整理的是關(guān)于Spring cloud 查詢返回廣告創(chuàng)意實(shí)例代碼,需要的朋友們可以跟著學(xué)習(xí)下。2019-08-08
SpringSecurity集成第三方登錄過程詳解(最新推薦)
在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對(duì)應(yīng)的Authentication實(shí)現(xiàn)來實(shí)現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧2024-05-05
SpringBoot如何實(shí)現(xiàn)word文檔轉(zhuǎn)pdf
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)word文檔轉(zhuǎn)pdf,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
淺談Java finally語句到底是在return之前還是之后執(zhí)行(必看篇)
下面小編就為大家?guī)硪黄獪\談Java finally語句到底是在return之前還是之后執(zhí)行(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案
大數(shù)據(jù)量的List集合,需要把List集合中的數(shù)據(jù)批量插入數(shù)據(jù)庫中,本文給大家介紹Spring Boot分段處理List集合多線程批量插入數(shù)據(jù)的解決方案,感興趣的朋友跟隨小編一起看看吧2024-04-04

