zoukankan      html  css  js  c++  java
  • 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(); }
  • 相关阅读:
    linux设置网关修改ip
    Linux Source命令及脚本的执行方式解析
    ARM9 S3C2440 定时器中断
    Linux下配置静态IP地址,设置DNS和主机名
    s3c2440外部中断操作
    vmware中为虚拟机添加硬盘空间
    『SHELL』SHELL脚本执行方式
    WCF开发的几个频骤
    MyEclipse下Axis2插件的下载和安装
    WCF系列(二) 使用配置文件构建和使用WCF服务
  • 原文地址:https://www.cnblogs.com/wanself/p/3183709.html
Copyright © 2011-2022 走看看