| 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; | 
|     } | 
| } |