com.biz.cache.caffeine.manager.BizCaffeineCacheLocalManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of biz-all Show documentation
Show all versions of biz-all Show documentation
BizX 是一个灵活而高效的业务开发框架, 其中也有很多为业务开发所需要的工具类的提供。
The newest version!
package com.biz.cache.caffeine.manager;
import com.biz.cache.caffeine.cache.BizCaffeineCache;
import com.biz.cache.caffeine.convert.CaffeineBuilder;
import com.biz.cache.caffeine.loader.BizCaffeineCacheLoader;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.context.annotation.Bean;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* Caffeine缓存的管理者,负责创建和管理CaffeineCache实例。
* 该管理者只在属性“biz.cache.caffeine-cache”为true时被条件化地启用。
*
* @author francis
* @since 1.0.1
**/
@ConditionalOnProperty(value = "biz.cache.caffeine-cache", havingValue = "true")
public class BizCaffeineCacheLocalManager implements BizCaffeineCacheManager {
/**
* 用于存储CaffeineCache实例的并发映射。
* 使用ConcurrentHashMap以确保线程安全和高并发性能。
*/
private static final ConcurrentMap CAFFEINE_CACHE_CONCURRENT_MAP = new ConcurrentHashMap<>(32);
/**
* 返回所有已创建的CaffeineCache实例。
*
* @return CaffeineCache实例的集合。
*/
@Override
public Collection getCaffeineCaches() {
return CAFFEINE_CACHE_CONCURRENT_MAP.values();
}
/**
* 根据BizCaffeineCacheLoader列表创建并返回CaffeineCache实例的集合。
* 此方法使用@Bean注解,表明它是一个Spring Bean,由Spring容器管理。
*
* @param bizCaffeineCacheManagers BizCaffeineCacheLoader的列表,用于配置和创建CaffeineCache。
* @return CaffeineCache实例的集合。
*/
@Bean
private Collection bizCaffeineCacheList(List bizCaffeineCacheManagers) {
for (BizCaffeineCacheLoader bizCaffeineCacheManager : bizCaffeineCacheManagers) {
this.convertAndCheckCacheName(bizCaffeineCacheManager.getCaches());
}
return CAFFEINE_CACHE_CONCURRENT_MAP.values();
}
/**
* 将BizCaffeineCache实例转换为CaffeineCache,并检查是否存在重复的缓存名称。
* 此方法负责实际的缓存创建和映射到CAFFEINE_CACHE_CONCURRENT_MAP中。
*
* @param caffeineCacheList BizCaffeineCache实例的列表。
*/
private void convertAndCheckCacheName(List caffeineCacheList) {
for (BizCaffeineCache bizCaffeineCache : caffeineCacheList) {
this.checkCacheName(bizCaffeineCache.getCacheName());
CaffeineCache caffeineCache = CaffeineBuilder.builder().setBizCaffeineCache(bizCaffeineCache);
CAFFEINE_CACHE_CONCURRENT_MAP.putIfAbsent(bizCaffeineCache.getCacheName(), caffeineCache);
}
}
/**
* 检查指定的缓存名称是否已存在于CAFFEINE_CACHE_CONCURRENT_MAP中。
* 如果存在,则抛出RuntimeException,指出缓存名称重复。
*
* @param cacheName 要检查的缓存名称。
* @throws RuntimeException 如果缓存名称已存在。
*/
private void checkCacheName(String cacheName) throws RuntimeException {
if (CAFFEINE_CACHE_CONCURRENT_MAP.containsKey(cacheName)) {
throw new RuntimeException("duplicate caffeine cache key");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy