spring cache中的key生成实现
spring cache中的keyGenerator实现
方法缓存中参数有很多,网上有很多key值都是存一个参数,导致参数为多个的情况,参数变化下缓存并不会刷新。解决方案就是重写spring cache的默认key实现方式,通过类名,方法名以及参数值得方式来生成key值
@Configuration("CacheManager")
@EnableCaching
public class J2CacheSpring
extends CachingConfigurerSupport
{
protected Logger logger = LoggerFactory.getLogger(getClass());
@Override public CacheManager cacheManager()
{
J2CacheConfig config = null;
try
{
config = J2CacheConfig.initFromConfig("/j2cache/j2cache.properties");
}
catch (IOException e)
{
e.printStackTrace();
}
// 生成 J2CacheBuilder
J2CacheBuilder j2CacheBuilder = J2CacheBuilder.init(config);
// 构建适配器
J2CacheSpringCacheManageAdapter j2CacheSpringCacheManageAdapter = new J2CacheSpringCacheManageAdapter(
j2CacheBuilder, true);
return j2CacheSpringCacheManageAdapter;
}
//自定义key生成实现
@Override
public KeyGenerator keyGenerator()
{
logger.info("缓存key值生成");
return new KeyGenerator(){
@Override
public Object generate(Object o, Method method, Object... objects) {
StringBuilder sb = new StringBuilder("Cache:BaseService");
sb.append(":");
sb.append(o.getClass().getName().toString());
sb.append(":");
sb.append(method.getName().toString());
StringBuilder s = new StringBuilder();
for (Object obj : objects) {
if (Objects.nonNull(obj)){
s.append(obj.toString());
}
}
sb.append(":");
sb.append(SecureUtil.md5(s.toString()));
return sb.toString();
}
};
}
}