Spring Cache指定CacheManager方式

 更新时间:2025年05月12日 09:46:50   作者:joefany  
这篇文章主要介绍了Spring Cache指定CacheManager方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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则会抛出异常,即必须指定一个

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot2.0处理自定义异常并返回json

    Springboot2.0处理自定义异常并返回json

    这篇文章主要介绍了Springboot2.0处理自定义异常并返回json,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java并发编程ReentrantReadWriteLock加读锁流程

    Java并发编程ReentrantReadWriteLock加读锁流程

    这篇文章主要介绍了Java并发编程ReentrantReadWriteLock加读锁流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 详解SpringBoot restful api的单元测试

    详解SpringBoot restful api的单元测试

    本篇文章主要介绍了详解SpringBoot restful api的单元测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • SpringBoot集成Access DB实现数据导入和解析

    SpringBoot集成Access DB实现数据导入和解析

    microsoft office access是由微软发布的关联式数据库管理系统,它结合了 microsoft jet database engine 和 图形用户界面两项特点,是一种关系数据库工具,本文给大家介绍了SpringBoot集成Access DB实现数据导入和解析,需要的朋友可以参考下
    2024-11-11
  • IDEA连接mysql数据库报错的解决方法

    IDEA连接mysql数据库报错的解决方法

    这篇文章主要介绍了IDEA连接mysql数据库报错的解决方法,文中有非常详细的图文示例,对出现Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ prope报错的小伙伴们很有帮助哟,需要的朋友可以参考下
    2021-05-05
  • Java实现指定线程执行顺序的三种方式示例

    Java实现指定线程执行顺序的三种方式示例

    这篇文章主要介绍了Java实现指定线程执行顺序的三种方式,包括通过共享对象锁加上可见变量,通过主线程Join()以及通过线程执行时Join()等三种实现方法,需要的朋友可以参考下
    2019-01-01
  • Java整数和字符串相互转化实例详解

    Java整数和字符串相互转化实例详解

    这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Monaco Editor实现sql和java代码提示实现示例

    Monaco Editor实现sql和java代码提示实现示例

    这篇文章主要为大家介绍了Monaco Editor代码提示sql和java实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java 实现拦截器Interceptor的拦截功能方式

    Java 实现拦截器Interceptor的拦截功能方式

    这篇文章主要介绍了Java 实现拦截器Interceptor的拦截功能方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 基于idea解决springweb项目的Java文件无法执行问题

    基于idea解决springweb项目的Java文件无法执行问题

    这篇文章给大家介绍了基于idea解决springweb项目的Java文件无法执行问题,文中通过图文结合的方式给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02

最新评论