使用教程:
- 引入jar
- 配置文件类
- 使用教程
- 有关于类内部中Cacheable失效的问题
第一步:引入jar
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
第二步:配置文件类
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager getCacheManager() {
GuavaCacheManager cacheManager = new GuavaCacheManager();
cacheManager.setCacheBuilder(
CacheBuilder.newBuilder()
//写入过期时间为3600s
.expireAfterWrite(3600, TimeUnit.SECONDS)
//缓存最大数为1000
.maximumSize(1000));
return cacheManager;
}
}
第三步: 注解使用方式
@Cacheable(value = "userCache", key = "#p0")
public SecurityUser loadUserByUsername(String userName) throws UsernameNotFoundException {
SecurityUser userInfo = userMapper.getUserByName(userName);
Optional.ofNullable(userInfo).orElseThrow(() -> new BusinessException(413, "该用户不存在"));
return userInfo ;
}
有关于Cacheable失效的问题:
Cacheable的实现 是使用Aop的代理模式,所以在类内部不同方法体之间调用cacheable注解会失效,transtion事务注解在类内部同一方法体中也会失效,所以解决办法是,创建一个不同的类去调用标注了cacheable注解的方法体就ok了