1.创建子模块
这里我们创建一个子模块
1 2
| group = 'com.ray.study' artifact ='spring-boot-07-cache-caffeine'
|
2.引入依赖
2.1 继承父工程依赖
在父工程spring-boot-seeds
的 settings.gradle
加入子工程
1 2 3 4 5 6 7 8 9 10 11 12 13
| rootProject.name = 'spring-boot-seeds' include 'spring-boot-01-helloworld' include 'spring-boot-02-restful-test' include 'spring-boot-03-thymeleaf' include 'spring-boot-04-swagger2' include 'spring-boot-05-jpa' include 'spring-boot-05-mybatis' include 'spring-boot-05-tk-mybatis' include 'spring-boot-06-nosql-redis' include 'spring-boot-06-nosql-mongodb' include 'spring-boot-07-cache-concurrentmap' include 'spring-boot-07-cache-ehcache' include 'spring-boot-07-cache-caffeine'
|
这样,子工程spring-boot-07-cache-caffeine
就会自动继承父工程中subprojects
`函数里声明的依赖,主要包含如下依赖:
1 2 3 4 5
| implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
|
2.2 引入ehcache
`依赖
将子模块spring-boot-07-cache-caffeine
的build.gradle
修改为如下内容:
1 2 3 4 5 6 7 8 9 10
| dependencies { implementation 'org.springframework.boot:spring-boot-starter-cache' implementation 'com.github.ben-manes.caffeine:caffeine'
implementation 'mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' }
|
3.修改配置
3.1 修改application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| server: port: 8088 servlet: context-path: /
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/integrate-jpa?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: root jpa: database: mysql show-sql: true hibernate: ddl-auto: update cache: type: caffeine cache-names: user,role caffeine: spec: maximumSize=300,expireAfterWrite=2m
|
caffeine 配置说明:
- initialCapacity=[integer]: 初始的缓存空间大小
- maximumSize=[long]: 缓存的最大条数
- maximumWeight=[long]: 缓存的最大权重
- expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期
- expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期
- refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
- weakKeys: 打开key的弱引用
- weakValues:打开value的弱引用
- softValues:打开value的软引用
- recordStats:开发统计功能
3.2 CacheConfiguration
开启缓存支持
通常SpringBoot默认的keyGenerator 是SimpleKeyGenerator,这个策略是以参数作为key值,如果参数为空的,就会返回SimpleKey[]字符串,这对于很多无参的方法的就有问题了.
向Spring容器中重新注册一个实现了 org.springframework.cache.interceptor.keyGenerator
这个接口的Bean即可,将key值设置为类名+方法名+参数名,这样就不会冲突了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package com.ray.study.springboot07cache.caffeine.config;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
@Configuration @EnableCaching public class CacheConfiguration {
@Bean public KeyGenerator caffeineKeyGenerator() { return (target, method, params) -> { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); }; }
}
|