您的位置:首页 > 编程语言 > Java开发

java spring 使用注解来实现缓存

2013-07-12 10:57 706 查看
这里举例使用spring3.1.4+ehcache

注解的方式使用cache是在spring3.1加入的

使用方法:

1.ehcache依赖+spring依赖

<!--ehcache依赖-->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.7.2</version>
</dependency>


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.4.RELEASE</version>
</dependency>
<!--这里有注解类需要的jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.4.RELEASE</version>
</dependency>

      <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>2.2.2</version>
      </dependency>



2.spring+ehcache的简单配置

Ehcache的基本配置,具体参数意思看:http://www.ehcache.org/documentation/configuration/configuration

namecache的唯一标识

maxElementsInMemory最大创建条数

eternal缓存是否是永久的,默认false

timeToLiveSeconds缓存的存活时间

timeToIdleSeconds多长时间不访问就清楚该缓存

overflowToDisk内存不足是否写入磁盘,默认False

maxElementsOnDisk持久化到硬盘最大条数

memoryStoreEvictionPolicy缓存满了后,清除缓存的规则,

自带三种:FIFO(先进先出),LFU(最少使用),LRU(最近最少使用)

diskSpoolBufferSizeMB磁盘缓存的缓存区大小,默认30M

diskExpiryThreadIntervalSeconds磁盘失效线程时间间隔

2.1首先建立一个ehcache.xml的配置文件

<ehcache>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>

<cache
name="onecache"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="10"
timeToLiveSeconds="10"/>
</ehcache>


2.2在spring的apllication.xml加入注入的cache

<cache:annotation-drivencache-manager="cacheManager"/>

<beanid="cacheManager"class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cacheManager-ref="ehcache"/>
<beanid="ehcache"class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation="classpath:ehcache.xml"
p:shared="true"/>


这里还需要在配置文件头部引入

xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
...http://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache-3.1.xsd"


在mvc-servlet.xml里加入

<mvc:annotation-driven/><!--挺重要的,不加注解不会被扫描-->


3.注解使用

3.1用于对象class

@Cacheable(value="onecache")
classA1{}


这种情况类中方法中返回值都会被缓存,

3.2用于方法method

@Cacheable(value="onecache",key="#name",condition="#age<25")
publicxxfindEmployeeBySurname(StringfirstName,Stringname,intage){
returnxxx
}


这个就会将age小于25的值,按name为key缓存

3.3清除

@CacheEvict(value="onecache",key="#name+'haha'")
publicvoiddelete(Stringname){
System.out.println("deleteonename");
}


还可使用下面的清除全部

@CacheEvict(value="oneCache",allEntries=true)


4.代码调用

@Autowired
privateCacheManagercacheManager;

//获取当前时间
publicStringgetABCCache(){
cacheManager.getCache("ccc").put("hello",newDate().toString());
return(String)cacheManager.getCache("ccc").get("hello").get();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: