为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot:覆盖 CacheManager bean 使缓存相关属性不起作用

Spring Boot:覆盖 CacheManager bean 使缓存相关属性不起作用

繁花如伊 2023-02-16 17:17:11
我有一个带有 Redis 缓存的 Spring Boot 2 应用程序。CacheManager在我覆盖bean之前,它工作得很好。问题:以下配置属性被忽略(我无法再关闭缓存):spring.cache.type=none尽管根据文档它应该可以工作。问题:如何制作spring.cache.type=none作品?有这样的解决方法,但这远不是一个好的解决方案。更多详细信息:这是我的配置的样子:@Configurationpublic class CacheConfiguration {    @Bean    RedisCacheWriter redisCacheWriter(RedisConnectionFactory connectionFactory) {        return RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);    }    @Bean    CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {        Map<String, RedisCacheConfiguration> ttlConfiguration = ...        RedisCacheConfiguration defaultTtlConfiguration = ...        return new RedisCacheManager(                redisCacheWriter, defaultTtlConfiguration, ttlConfiguration        );    }}
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞


因为您是自己创建 CacheManager,所以您还必须检查spring.cache.type是否要关闭它。


@Bean

@ConditionalOnExpression("${spring.cache.type} != 'none'")

CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {


查看完整回答
反对 回复 2023-02-16
?
翻阅古今

TA贡献1780条经验 获得超5个赞

内置的 Spring Redis 缓存配置位于org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration

@Conditional(CacheCondition.class)它上面有一个。这CacheCondition将检查属性的值spring.cache.type。如果它设置为“NONE”整个配置,包括RedisCacheManagerbean 根本不会加载。

现在,当您创建自己的配置时,您可以cacheManager自己定义它,无论spring.cache.type变量的值如何,它都会被加载

所以你应该放一些条件值(这将读取spring.cache.type值或你的自定义条件)


查看完整回答
反对 回复 2023-02-16
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信