@Cacheable 做用和配置方法html
@Cacheable 的做用 主要针对方法配置,可以根据方法的请求参数对其结果进行缓存spring
@Cacheable 主要的参数 | ||
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”} |
key | 缓存的 key,能够为空,若是指定要按照 SpEL 表达式编写,若是不指定,则缺省按照方法的全部参数进行组合 | 例如: @Cacheable(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,能够为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 | 例如: @Cacheable(value=”testcache”,condition=”#userName.length()>2”) |
------------------------------------------------------------express
--////////////////////////////////////////////////////////////////////////////////缓存
@CachePut 做用和配置方法spa
@CachePut 的做用 主要针对方法配置,可以根据方法的请求参数对其结果进行缓存,和 @Cacheable 不一样的是,它每次都会触发真实方法的调用.net
@CachePut 主要的参数 | ||
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”} |
key | 缓存的 key,能够为空,若是指定要按照 SpEL 表达式编写,若是不指定,则缺省按照方法的全部参数进行组合 | 例如: @Cacheable(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,能够为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 | 例如: @Cacheable(value=”testcache”,condition=”#userName.length()>2”) |
//////////////////////////////////////////////////////code
@CacheEvict 做用和配置方法htm
@CachEvict 的做用 主要针对方法配置,可以根据必定的条件对缓存进行清空blog
@CacheEvict 主要的参数 | ||
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @CachEvict(value=”mycache”) 或者 @CachEvict(value={”cache1”,”cache2”} |
key | 缓存的 key,能够为空,若是指定要按照 SpEL 表达式编写,若是不指定,则缺省按照方法的全部参数进行组合 | 例如: @CachEvict(value=”testcache”,key=”#userName”) |
condition | 缓存的条件,能够为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才清空缓存 | 例如: @CachEvict(value=”testcache”, condition=”#userName.length()>2”) |
allEntries | 是否清空全部缓存内容,缺省为 false,若是指定为 true,则方法调用后将当即清空全部缓存 | 例如: @CachEvict(value=”testcache”,allEntries=true) |
beforeInvocation | 是否在方法执行前就清空,缺省为 false,若是指定为 true,则在方法尚未执行的时候就清空缓存,缺省状况下,若是方法执行抛出异常,则不会清空缓存 | 例如: @CachEvict(value=”testcache”,beforeInvocation=true) |
--------------ci
额外补充:@cache(“something");这个至关于save()操做,@cachePut至关于Update()操做,只要他标示的方法被调用,那么都会缓存起来,而@cache则是先看下有没已经缓存了,而后再选择是否执行方法。@CacheEvict至关于Delete()操做。用来清除缓存用的。
这写配置的声明须要配置好了@enableCache才有用,具体的配置能够看这篇文章
http://blog.csdn.net/sanjay_f/article/details/47363845
若是忘记了SpEL怎么用了, do yourself a favor and read Chapter 9, Spring Expression Language (SpEL):
不知道大家注意到一个问题没有,就是全部的@Cacheable()里面都有一个name=“xxx”的属性,这显然若是方法多了,写起来也是挺累的,若是能够一次性声明完 那就省事了,
因此,有了@CacheConfig这个配置,@CacheConfig
is a class-level annotation that allows to share the cache names,不过不用担忧,若是你在你的方法写别的名字,那么依然以方法的名字为准。
固然还有另一个状况,@Cacheable(name="remote",key="'USER_NAME_'+#args[0]" ,conditional=“xxx”,allEntries=true,beforeInvocation=true) ,像这样的配置就很长,
@Cacheable(name = "book", key="#isbn",conditional=“xxx”,allEntries=true,beforeInvocation=true) public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
这样的配置很长,并且有可能声明在不少个方法的,因此咱们很想精简点,容易配置些。因此
@findBookByIsbnervice public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
新建一个文件findBookByIsbn, 内容以下
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) @Cacheable(cacheNames="books", key="#isbn") public @interface findBookByIsbn { }