【问题标题】:Spring Cloud AWS: optional cache managerSpring Cloud AWS:可选缓存管理器
【发布时间】:2016-02-02 11:52:13
【问题描述】:

Spring 缓存配置允许使用CompositeCacheManagerfallbackToNoOpCache 属性设置为true 回退到无缓存。这如何与 spring-cloud-aws 缓存管理器一起使用,以便在指定不存在的缓存集群时,复合缓存管理器回退到无缓存?使用这样的示例配置:

<aws-cache:cache-manager>
    <aws-cache:cache-cluster name="CacheCluster" />
</aws-cache:cache-manager>

当没有配置名为 CacheCluster 的集群时,应用程序将无法启动。当CompositeCacheManager 配置如下:

<aws-cache:cache-manager id="elasticacheManager">
    <aws-cache:cache-cluster name="CacheCluster" />
</aws-cache:cache-manager>

<bean id="cacheManager" class="org.springframework.cache.support.CompositeCacheManager">
    <property name="cacheManagers">
        <list>
            <ref bean="elasticacheManager" />
        </list>
    </property>
    <property name="fallbackToNoOpCache" value="true"/>
</bean>

使用不存在的缓存 CacheCluster,则应用程序无法启动并抱怨:“未定义名为 'elasticacheManager' 的 bean”。 有没有办法以编程方式创建 AWS 缓存管理器并为此使用 FactoryBean 之类的东西?

【问题讨论】:

    标签: caching spring-cloud amazon-elasticache


    【解决方案1】:

    目前 Spring Cloud AWS 不支持回退缓存的配置。我会将它作为功能请求添加到我们的积压工作中。同时,您可以使用我在参考应用程序中使用弹簧配置文件所做的相同解决方法(请参阅ReferenceApplication.java)。

    【讨论】:

    • 查看了CacheBeanDefinitionParser的实现,发现它创建了一个SimpleCacheManager,并且不容易hook到工厂。即使可以使用 BeanFactoryPostProcessor 之类的东西来检查缓存集群的可用性并删除不可用的缓存,实现它的开销也比使用其他解决方案更高,目前没有 spring 云。不幸的是,配置文件的技巧在我的情况下不起作用:事实上,它旨在用于生产环境中,以在缓存集群不可用时提供故障安全行为。
    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多