SpringBoot2教程(三)整合缓存Ehcache

源码地址:https://github.com/q200737056/Spring-Course/tree/master/springboot2Ehcache

一、项目环境

Java8+Maven3.3.9+SpringBoot2.0.4+Mybatis3+Ehcache+Mysql+Eclipse


二、加入依赖及ehcache.xml



    
            org.springframework.boot
            spring-boot-starter-cache
        
        
        
            net.sf.ehcache
            ehcache
        

在项目根目录下取名ehcache.xml,springboot会默认加载该配置;如若不然,可在application.yml或application.properties中配置路径。

spring:
  cache:
    type: ehcache
    ehcache:
      config: classpath:/myehcache.xml

ehcache.xml标签及属性



    
    
    

    
    

  • diskStore标签:磁盘缓存位置
  • defaultCache标签:默认缓存
  • cache标签 :自定义缓存
  • maxEntriesLocalHeap(旧版 maxElementsInMemory):设置了缓存的上限,最多存储多少个对象
  • eternal:对象是否永不过期 (指定true则下面两项配置无效)
  • timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)
  • timeToLiveSeconds:设置对象允许存活时间(单位:秒)
  • overflowToDisk:内存中Element数量达到最大时是否允许对象被写入到磁盘
  • memoryStoreEvictionPolicy:当达到最大限制时,Ehcache将会根据指定的策略去清理内存; 默认策略是LRU(最近最少使用)FIFO(先进先出) LFU(最少使用)
  • maxEntriesLocalDisk:磁盘缓存最大对象数,默认为0不限制
  • diskExpiryThreadIntervalSeconds:磁盘缓存的清理线程运行间隔,默认是120秒
  • diskPersistent:是否持久化磁盘缓存,默认false
  • copyOnRead:当缓存项被读出时是否返回它的拷贝,默认false
  • copyOnWrite:当缓存项被写入时,是否写入到它的拷贝中,默认false

三、在启动类注解@EnableCaching开启缓存

@SpringBootApplication
@MapperScan("com.springboot2.test3.dao")
@EnableCaching
public class App {
    public static void main( String[] args ){
        SpringApplication.run(App.class, args);
        System.out.println("启动成功。。。。。。。。。。。");
    }
}

四、业务层方法上加缓存

@Cacheable(value="myCache",key="'user'+#id",unless = "#result eq null")
    @Override
    public User queryUserById(String id){
        System.out.println("去查询数据库。。。");
        return this.indexDao.queryUserById(Integer.valueOf(id));
    }
@CachePut(value="myCache",key="'user'+#user.id")
    @Override
    public User updateUser(User user){
         this.indexDao.updateUser(user);
         return user;
    }
@CacheEvict(value="myCache",key="'user'+#id")
    @Override
    public int deleteUser(String id){
        return this.indexDao.deleteUser(id);
    }

主要的几个缓存注解

  • @Cacheable:对方法配置,能够根据方法的请求参数对其进行缓存
  • @CacheEvict:清除缓存
  • @CachePut:主要用来更新缓存
  • @CacheConfig:统一配置类的缓存注解的属性

@Cacheable/@CachePut/@CacheEvict主要的参数

  • value:缓存的名称,在配置文件中定义
  • key:缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,
    如果不指定,则缺省按照方法的所有参数进行组合
  • condition:缓存的条件,只有为 true才进行缓存/清除缓存
  • unless:与condition相反,只有为 false才进行缓存/清除缓存
  • allEntries:是否清空所有缓存内容,缺省为 false
  • beforeInvocation:是否在方法执行前就清空,缺省为 false;缺省情况下,如果方法 执行抛出异常,则不会清空缓存

五、简单介绍一下SpEL表达式

其实在Spring3中就已经支持EL表达式了,简称SpEL。以前在xml配置中,经常会看到如下表达式#{...}


      
    
     
  


SpEL支持字符串,数字,布尔及null。当然也可以访问变量,对象的属性,对象的方法,集合,map,静态方法等。#{person.name},#{person.getName()},#{list[0]},#{map['name']},#{T(Math).abs(-1)}
变量可以通过StandardEvaluationContextsetVariable方法设置到上下文中。当访问一个对象的属性或方法时, 若该对象为null, 就会出现空指针异常,可在对象后加?

Spring EL支持的操作符

  • 关系操作符, 包括: eq(==), ne(!=), lt()<, le(<=), gt(>), ge(>=)
  • 逻辑运算符, 包括: and(&&), or(||), not(!)
  • 数学操作符, 包括: 加(+), 减(-), 乘(*), 除(/), 取模(%), 幂指数(^)
  • 其他操作符, 如: 三元操作符, instanceof, 赋值(=), 正则匹配

你可能感兴趣的:(SpringBoot2教程(三)整合缓存Ehcache)