111 lines
3.8 KiB
Java
111 lines
3.8 KiB
Java
package com.bonus.material.config;
|
||
|
||
import org.springframework.cache.CacheManager;
|
||
import org.springframework.cache.annotation.EnableCaching;
|
||
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
|
||
import org.springframework.context.annotation.Bean;
|
||
import org.springframework.context.annotation.Configuration;
|
||
import org.springframework.cache.interceptor.KeyGenerator;
|
||
|
||
import java.lang.reflect.Method;
|
||
import java.util.Arrays;
|
||
|
||
/**
|
||
* 缓存配置类
|
||
* 为getUseTypeTree方法优化提供缓存支持
|
||
*/
|
||
@Configuration
|
||
@EnableCaching
|
||
public class CacheConfig {
|
||
|
||
/**
|
||
* 缓存管理器配置
|
||
* 使用ConcurrentMapCacheManager作为简单的内存缓存
|
||
* 生产环境建议使用Redis等分布式缓存
|
||
*/
|
||
@Bean
|
||
public CacheManager cacheManager() {
|
||
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager();
|
||
|
||
// 配置缓存名称
|
||
cacheManager.setCacheNames(Arrays.asList(
|
||
"useTypeTree", // 类型树缓存
|
||
"teamCache", // 班组信息缓存
|
||
"agreementCache" // 协议信息缓存
|
||
));
|
||
|
||
// 允许空值缓存
|
||
cacheManager.setAllowNullValues(false);
|
||
|
||
return cacheManager;
|
||
}
|
||
|
||
/**
|
||
* 自定义键生成器
|
||
* 用于生成更精确的缓存键
|
||
*/
|
||
@Bean("customKeyGenerator")
|
||
public KeyGenerator keyGenerator() {
|
||
return new KeyGenerator() {
|
||
@Override
|
||
public Object generate(Object target, Method method, Object... params) {
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.append(target.getClass().getSimpleName()).append(".");
|
||
sb.append(method.getName()).append("(");
|
||
|
||
for (int i = 0; i < params.length; i++) {
|
||
if (i > 0) {
|
||
sb.append(",");
|
||
}
|
||
if (params[i] != null) {
|
||
sb.append(params[i].toString());
|
||
} else {
|
||
sb.append("null");
|
||
}
|
||
}
|
||
sb.append(")");
|
||
|
||
return sb.toString();
|
||
}
|
||
};
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Redis缓存配置(可选)
|
||
* 如果需要使用Redis作为缓存,可以启用以下配置
|
||
*/
|
||
/*
|
||
@Configuration
|
||
@EnableCaching
|
||
@ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis")
|
||
public class RedisCacheConfig {
|
||
|
||
@Bean
|
||
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
|
||
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
|
||
.entryTtl(Duration.ofMinutes(30)) // 缓存30分钟过期
|
||
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
|
||
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
|
||
.disableCachingNullValues();
|
||
|
||
// 为不同的缓存设置不同的过期时间
|
||
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
|
||
|
||
// 类型树缓存 - 30分钟过期
|
||
cacheConfigurations.put("useTypeTree", config.entryTtl(Duration.ofMinutes(30)));
|
||
|
||
// 班组缓存 - 1小时过期
|
||
cacheConfigurations.put("teamCache", config.entryTtl(Duration.ofHours(1)));
|
||
|
||
// 协议缓存 - 15分钟过期
|
||
cacheConfigurations.put("agreementCache", config.entryTtl(Duration.ofMinutes(15)));
|
||
|
||
return RedisCacheManager.builder(connectionFactory)
|
||
.cacheDefaults(config)
|
||
.withInitialCacheConfigurations(cacheConfigurations)
|
||
.build();
|
||
}
|
||
}
|
||
*/
|