回过头来咱们再来看,这里使用到的两个注解分别做了什么事情。html
@CacheConfig
:主要用于配置该类中会用到的一些共用的缓存配置。在这里@CacheConfig(cacheNames = "users")
:配置了该数据访问对象中返回的内容将存储于名为users的缓存对象中,咱们也能够不使用该注解,直接经过@Cacheable
本身配置缓存集的名字来定义。spring
@Cacheable
:配置了findByName函数的返回值将被加入缓存。同时在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问。该注解主要有下面几个参数:数据库
value
、cacheNames
:两个等同的参数(cacheNames
为Spring 4新增,做为value
的别名),用于指定缓存存储的集合名。因为Spring 4中新增了@CacheConfig
,所以在Spring 3中本来必须有的value
属性,也成为非必需项了key
:缓存对象存储在Map集合中的key值,非必需,缺省按照函数的全部参数组合做为key值,若本身配置需使用SpEL表达式,好比:@Cacheable(key = "#p0")
:使用函数第一个参数做为缓存的key值,更多关于SpEL表达式的详细内容可参考官方文档condition
:缓存对象的条件,非必需,也需使用SpEL表达式,只有知足表达式条件的内容才会被缓存,好比:@Cacheable(key = "#p0", condition = "#p0.length() < 3")
,表示只有当第一个参数的长度小于3的时候才会被缓存,若作此配置上面的AAA用户就不会被缓存,读者可自行实验尝试。unless
:另一个缓存条件参数,非必需,需使用SpEL表达式。它不一样于condition
参数的地方在于它的判断时机,该条件是在函数被调用以后才作判断的,因此它能够经过对result进行判断。keyGenerator
:用于指定key生成器,非必需。若须要指定一个自定义的key生成器,咱们须要去实现org.springframework.cache.interceptor.KeyGenerator
接口,并使用该参数来指定。须要注意的是:该参数与key
是互斥的cacheManager
:用于指定使用哪一个缓存管理器,非必需。只有当有多个时才须要使用cacheResolver
:用于指定使用那个缓存解析器,非必需。需经过org.springframework.cache.interceptor.CacheResolver
接口来实现本身的缓存解析器,并用该参数指定。除了这里用到的两个注解以外,还有下面几个核心注解:数组
@CachePut
:配置于函数上,可以根据参数定义条件来进行缓存,它与@Cacheable
不一样的是,它每次都会真是调用函数,因此主要用于数据新增和修改操做上。它的参数与@Cacheable
相似,具体功能可参考上面对@Cacheable
参数的解析@CacheEvict
:配置于函数上,一般用在删除方法上,用来从缓存中移除相应数据。除了同@Cacheable
同样的参数以外,它还有下面两个参数allEntries
:非必需,默认为false。当为true时,会移除全部数据beforeInvocation
:非必需,默认为false,会在调用方法以后移除数据。当为true时,会在调用方法以前移除数据。完成了上面的缓存实验以后,可能你们会问,那咱们在Spring Boot中到底使用了什么缓存呢?缓存
在Spring Boot中经过@EnableCaching
注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:app
除了按顺序侦测外,咱们也能够经过配置属性spring.cache.type
来强制指定。咱们能够经过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。框架
本文中不对全部的缓存作详细介绍,下面以经常使用的EhCache为例,看看如何配置来使用EhCache进行缓存管理。less
在Spring Boot中开启EhCache很是简单,只须要在工程中加入ehcache.xml
配置文件并在pom.xml中增长ehcache依赖,框架只要发现该文件,就会建立EhCache的缓存管理器。函数
src/main/resources
目录下建立:ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> <cache name="users" maxEntriesLocalHeap="200" timeToLiveSeconds="600"> </cache> </ehcache>
pom.xml
中加入 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
完成上面的配置以后,再经过debug模式运行单元测试,观察此时CacheManager已是EhCacheManager实例,说明EhCache开启成功了。单元测试
对于EhCache的配置文件也能够经过application.properties
文件中使用spring.cache.ehcache.config
属性来指定,好比:
spring.cache.ehcache.config=classpath:config/another-config.xml