package com.dy.sso.config;
|
|
|
import com.dy.common.util.NumUtil;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.cache.CacheManager;
|
import org.springframework.cache.caffeine.CaffeineCacheManager;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import java.util.concurrent.TimeUnit;
|
|
@Configuration
|
public class CaffeineCacheConfiguration {
|
private static final int cacheInitialCapacityDefault = 10 ;
|
private static final int cacheMaximumSizeDefault = 10000 ;
|
private static final int cacheDurationDefault = 720 ;
|
|
@Value("${pipIrr.sso.cacheMaximumSize}")
|
private String cacheMaximumSize ;
|
|
@Value("${pipIrr.sso.cacheDuration}")
|
private String cacheDuration ;
|
/*
|
initialCapacity=[integer]: 初始的缓存空间大小
|
maximumSize=[long]: 缓存的最大条数
|
maximumWeight=[long]: 缓存的最大权重
|
expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期
|
expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期
|
refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
|
weakKeys: 打开key的弱引用
|
weakValues:打开value的弱引用
|
softValues:打开value的软引用
|
recordStats:开发统计功能
|
注意:
|
expireAfterWrite和expireAfterAccess同时存在时,以expireAfterWrite为准。
|
maximumSize和maximumWeight不可以同时使用
|
weakValues和softValues不可以同时使用weakValues和softValues不可以同时使用
|
*/
|
@Bean
|
public CacheManager cacheManager() {
|
int cacheMaximumSizeInt;
|
int cacheDurationInt;
|
if(NumUtil.isPlusIntNumber(cacheMaximumSize)){
|
cacheMaximumSizeInt = Integer.parseInt(cacheMaximumSize) ;
|
}else{
|
cacheMaximumSizeInt = cacheMaximumSizeDefault ;
|
}
|
if(NumUtil.isPlusIntNumber(cacheDuration)){
|
cacheDurationInt = Integer.parseInt(cacheDuration) ;
|
}else{
|
cacheDurationInt = cacheDurationDefault ;
|
}
|
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
|
cacheManager.setCaffeine(Caffeine.newBuilder()
|
.initialCapacity(cacheInitialCapacityDefault)
|
.maximumSize(cacheMaximumSizeInt)
|
.expireAfterAccess(cacheDurationInt, TimeUnit.MINUTES));
|
|
return cacheManager;
|
}
|
}
|