jetcache
jetcache copied to clipboard
@CreateCache 建议支持从Nacos,或Spring 环境中拿到对应该的过期时间配置等
由于@CreateCache 的expires,name,localExpire,localLimit 相对来说放在配置文件或从nacos读取最灵活,否则就得改代码发版。 建议支持从Nacos,或Spring 环境中拿到对应该的过期时间配置。 如 @CreateCache(configId="userlistKey") 则 jetcache.configkey.userlistKey= { name= "user.list",expires=100....}
这个需求是有意义的,不过可能改动比较大,现在没有这方面的计划。如果有兴趣可以自己试试改。
看到 @CreateCache 打了删除标记,是准备以后使用QuickConfig手动建立缓存管理对象吗? 还是有替代的注解?
看到 @CreateCache 打了删除标记,是准备以后使用QuickConfig手动建立缓存管理对象吗? 还是有替代的注解?
是的,CreateCache注解的javadoc文档有说明。
附议,@Cached 注解的localExpire参数,也希望能做到有个可以读取spirng环境中的变量作为全局的默认值。目前我尝试自己改造了一下,用以下方式实现了
1.添加CustomizeSpringCacheContext实现类
public class CustomizeSpringCacheContext extends SpringCacheContext {
private long globalLocalExpire = CacheConsts.UNDEFINED_INT;
public CustomizeSpringCacheContext(SpringConfigProvider configProvider,
GlobalCacheConfig globalCacheConfig,
ApplicationContext applicationContext,
JetCacheProperties jetCacheProperties) {
super(configProvider, globalCacheConfig, applicationContext);
if (jetCacheProperties != null) {
// 注入外部环境变量
globalLocalExpire = jetCacheProperties.getLocalExpire();
}
}
@Override
protected Cache buildLocal(CachedAnnoConfig cachedAnnoConfig, String area) {
if (cachedAnnoConfig.getCacheType() == CacheType.BOTH &&
cachedAnnoConfig.getLocalExpire() == CacheConsts.UNDEFINED_INT) {
// 核心逻辑,如果LocalExpire 为默认值 ,则使用 globalLocalExpire 作为 本地缓存值,这里可以继续扩展根据不同的情况设置不同值
cachedAnnoConfig.setLocalExpire(this.globalLocalExpire);
}
return super.buildLocal(cachedAnnoConfig, area);
}
}
2.注册bean
// 自定义的环境变量对象
@Autowired
private JetCacheProperties jetCacheProperties;
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringConfigProvider springConfigProvider() {
return new SpringConfigProvider(){
@Override
protected CacheContext newContext() {
return new CustomizeSpringCacheContext(this, globalCacheConfig, applicationContext,jetCacheProperties);
}
};
}