Spring boot 使用Spring引导执行器刷新端点在运行时刷新Spring Redis缓存管理器Bean

Spring boot 使用Spring引导执行器刷新端点在运行时刷新Spring Redis缓存管理器Bean,spring-boot,redis,spring-cloud,spring-boot-actuator,spring-cloud-config,Spring Boot,Redis,Spring Cloud,Spring Boot Actuator,Spring Cloud Config,我正在我的应用程序中使用Spring boot 1.5.15。我已经将Redis作为缓存服务器添加了缓存支持,并使用Spring缓存注释来处理缓存操作 使用Spring缓存和Redis,无法为我使用的每个缓存提供单独的过期时间 @Bean @RefreshScope public CacheManager cacheManager() { RedisCacheManager cacheManager = new RedisCacheMana

我正在我的应用程序中使用Spring boot 1.5.15。我已经将Redis作为缓存服务器添加了缓存支持,并使用Spring缓存注释来处理缓存操作

使用Spring缓存和Redis,无法为我使用的每个缓存提供单独的过期时间

    @Bean
    @RefreshScope
    public CacheManager cacheManager() {
                RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);

                cacheManager.setUsePrefix(true);
                List<CacheConfig> cacheConfigList = appConfig.getCacheConfig();
                    if (null != cacheConfigList && cacheConfigList.size() > 0) {
                    cacheManager.setExpires(getCacheExpirySecondsMap(cacheConfigList));
                }
                return cacheManager;
            }

   public Map<String, Long> getCacheExpirySecondsMap(List<CacheConfig> cacheConfigList) {
        Map<String, Long> cacheConfigMap = cacheConfigList.stream()
                .collect(Collectors.toMap(x -> x.getName(), x -> x.getExpirySeconds()));
        return cacheConfigMap;
    }
因此,我定制了如下CacheManager bean,并创建了一个配置类来获取我使用的各个缓存的yaml文件中的过期值

    @Bean
    @RefreshScope
    public CacheManager cacheManager() {
                RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);

                cacheManager.setUsePrefix(true);
                List<CacheConfig> cacheConfigList = appConfig.getCacheConfig();
                    if (null != cacheConfigList && cacheConfigList.size() > 0) {
                    cacheManager.setExpires(getCacheExpirySecondsMap(cacheConfigList));
                }
                return cacheManager;
            }

   public Map<String, Long> getCacheExpirySecondsMap(List<CacheConfig> cacheConfigList) {
        Map<String, Long> cacheConfigMap = cacheConfigList.stream()
                .collect(Collectors.toMap(x -> x.getName(), x -> x.getExpirySeconds()));
        return cacheConfigMap;
    }
我的AppConfig有以下字段

String name;
Long expirySeconds;
List<CacheConfig> cacheConfig;
这个很好用。但是,现在我需要在运行时动态更改缓存的到期值,而不必循环服务

我尝试将@RefreshScope添加到缓存管理器bean中,并将配置外部化到配置Repo中,由SpringCloudConfigServer提供服务。但是,当我调用执行器/刷新端点时,我没有看到缓存管理器bean被刷新。但是,我确实看到CacheConfig bean使用这些值进行了更新。此外,我看到对/refresh的响应包括已更新的字段,这些字段的过期值已更改

基本上,我想用新的过期时间更新RedisCacheManagerBean,以便它们将应用于不同缓存的所有现有缓存键和新缓存键。另外,我正在使用SpringCloudEdgware.SR4

我已经分享了我在repo中使用的代码,包括配置服务器、配置repo和存储库中的缓存服务

如果有人知道如何解决这个问题,请帮助我