java spring 使用註解來實現緩存

這裏舉例使用spring3.1.4 + ehcache java

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

使用方法:spring

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/configurationmvc

name

cache的惟一標識spa

maxElementsInMemory

最大建立條數線程

eternal

緩存是不是永久的,默認falsecode

timeToLiveSeconds

緩存的存活時間xml

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(); }
相關文章
相關標籤/搜索