Spring 引导:覆盖 CacheManager bean 使缓存相关属性不起作用
Spring Boot: Overriding CacheManager bean makes cache related properties not work
我有一个带有 Redis 缓存的 Spring Boot 2 应用程序。在我覆盖 CacheManager
bean 之前,它工作得很好。
问题:以下配置属性被忽略(我无法再关闭缓存):
spring.cache.type=none
尽管 according to the documentation 它应该可以工作。
问题:如何使spring.cache.type=none
工作?
有一个解决方法 like this,但这远不是一个好的解决方案。
更多详情:我的配置如下:
@Configuration
public 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
);
}
}
因为您是自己创建 CacheManager,所以您还必须检查 spring.cache.type
是否要关闭它。
@Bean
@ConditionalOnExpression("${spring.cache.type} != 'none'")
CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {
内置 Spring Redis 缓存配置位于 org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
上面有一个 @Conditional(CacheCondition.class)
。
此 CacheCondition
检查 spring.cache.type
属性 的值。如果它设置为 "NONE" 整个配置,包括 RedisCacheManager
bean 根本不会加载。
现在您已经创建了自己的配置,您自己定义了 cacheManager
,无论 spring.cache.type
变量
的值如何,它都会被加载
所以您可能应该输入一些条件值(将读取 spring.cache.type
值或您的自定义条件)
我有一个带有 Redis 缓存的 Spring Boot 2 应用程序。在我覆盖 CacheManager
bean 之前,它工作得很好。
问题:以下配置属性被忽略(我无法再关闭缓存):
spring.cache.type=none
尽管 according to the documentation 它应该可以工作。
问题:如何使spring.cache.type=none
工作?
有一个解决方法 like this,但这远不是一个好的解决方案。
更多详情:我的配置如下:
@Configuration
public 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
);
}
}
因为您是自己创建 CacheManager,所以您还必须检查 spring.cache.type
是否要关闭它。
@Bean
@ConditionalOnExpression("${spring.cache.type} != 'none'")
CacheManager cacheManager(RedisCacheWriter redisCacheWriter) {
内置 Spring Redis 缓存配置位于 org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
上面有一个 @Conditional(CacheCondition.class)
。
此 CacheCondition
检查 spring.cache.type
属性 的值。如果它设置为 "NONE" 整个配置,包括 RedisCacheManager
bean 根本不会加载。
现在您已经创建了自己的配置,您自己定义了 cacheManager
,无论 spring.cache.type
变量
所以您可能应该输入一些条件值(将读取 spring.cache.type
值或您的自定义条件)