Spring Cache 指定CacheManager

本文详细介绍了如何在Spring Boot应用中配置Redis作为缓存存储,并实现Spring Cache的集成。通过自定义CacheManager,可以设置缓存的过期时间等参数,确保数据的有效性和一致性。

配置文件application.properties中配置redis的相关配置

spring.redis.database=
spring.redis.host=
spring.redis.port=

Spring Cache 配置文件

@EnableCaching
@Configuration
public class CacheConfig extends CachingConfigurerSupport {

    private final RedisConnectionFactory redisConnectionFactory;

    @Autowired
    public CacheConfig(RedisConnectionFactory redisConnectionFactory) {
        this.redisConnectionFactory = redisConnectionFactory;
    }

    // 配置一个CacheManager 来支持spring cache的缓存注解
    @Bean
    public CacheManager cacheManager() {
        RedisCacheConfiguration configuration = RedisCacheConfiguration
                .defaultCacheConfig()
                .entryTtl(Duration.ofDays(1)) //过期时间
                ;

        return RedisCacheManager
                .builder(redisConnectionFactory)
                .cacheDefaults(configuration)
                .build();
    }

}
cacheManager()方法继承的是CachingConfigurerSupport类

AbstractCachingConfiguration是spring cache的配置文件加载方法,可以看到useCachingConfigurer方法里调用了cacheManager方法,就这样完成了指定spring cache的 CacheManager
@Configuration
public abstract class AbstractCachingConfiguration implements ImportAware {
     ......省略

	@Autowired(required = false)
	void setConfigurers(Collection<CachingConfigurer> configurers) {
		if (CollectionUtils.isEmpty(configurers)) {
			return;
		}
		if (configurers.size() > 1) {
			throw new IllegalStateException(configurers.size() + " implementations of " +
					"CachingConfigurer were found when only 1 was expected. " +
					"Refactor the configuration such that CachingConfigurer is " +
					"implemented only once or not at all.");
		}
		CachingConfigurer configurer = configurers.iterator().next();
		useCachingConfigurer(configurer);
	}

	/**
	 * Extract the configuration from the nominated {@link CachingConfigurer}.
	 */
	protected void useCachingConfigurer(CachingConfigurer config) {
		this.cacheManager = config::cacheManager;
		this.cacheResolver = config::cacheResolver;
		this.keyGenerator = config::keyGenerator;
		this.errorHandler = config::errorHandler;
	}

}

若不指定CacheManager,会从spring容器中查找是否有存在CacheManager,若存在一个CacheManager会使用该CacheManager,若存在多个CacheManager则会抛出异常,即必须指定一个。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值