java spring 使用注解来实现缓存

这里举例使用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

name

cache的唯一标识

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-driven cache-manager="cacheManager"/>



    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"

          p:cacheManager-ref="ehcache"/>

    <bean id="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/cache   http://www.springframework.org/schema/cache/spring-cache-3.1.xsd

        "

在mvc-servlet.xml 里加入

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

3.注解使用

3.1 用于对象 class

@Cacheable(value = "onecache")
class A1{}

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

3.2用于方法method

 @Cacheable(value = "onecache", key = "#name",condition = "#age < 25")

  public xx findEmployeeBySurname(String firstName, String name, int age) {

    return xxx

  }

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

3.3 清除

@CacheEvict(value="onecache",key="#name + 'haha'")

public void delete(String name) {

System.out.println("delete one name");

}

还可使用下面的清除全部

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

4.代码调用

  @Autowired

    private CacheManager cacheManager;



    //获取当前时间

    public String getABCCache() {        
cacheManager.getCache("ccc").put("hello", new Date().toString()); return (String) cacheManager.getCache("ccc").get("hello").get(); }

 

 

 

 

你可能感兴趣的:(spring)