jetcache @CreateCache 建议支持从Nacos,或Spring 环境中拿到对应该的过期时间配置等

gdrx4gfi  于 4个月前  发布在  Nacos
关注(0)|答案(4)|浏览(121)

由于@CreateCache 的expires,name,localExpire,localLimit 相对来说放在配置文件或从nacos读取最灵活,否则就得改代码发版。
建议支持从Nacos,或Spring 环境中拿到对应该的过期时间配置。
如 @CreateCache(configId="userlistKey") 则 jetcache.configkey.userlistKey= { name= "user.list",expires=100....}

d8tt03nd

d8tt03nd1#

这个需求是有意义的,不过可能改动比较大,现在没有这方面的计划。如果有兴趣可以自己试试改。

u2nhd7ah

u2nhd7ah2#

看到 @CreateCache 打了删除标记,是准备以后使用QuickConfig手动建立缓存管理对象吗? 还是有替代的注解?

6bc51xsx

6bc51xsx3#

看到 @CreateCache 打了删除标记,是准备以后使用QuickConfig手动建立缓存管理对象吗? 还是有替代的注解?

是的,CreateCache注解的javadoc文档有说明。

q7solyqu

q7solyqu4#

附议,@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);
            }
        };
    }

相关问题