简直so easy啊。 但是只会用是不行的,还要知其所以然,本文以官方的starter:spring-boot-starter-data-redis为例,从源码层面上分析整个自动化配置的过程。以期对starter和autoconfigure这两个Spring Boot的核心模块进行梳理。 了解原理后,我会通过模拟spring-boot-starter-data-redis,并使用Jedis来创建一个处理redis的自...
@Configuration@ConditionalOnClass(RedisOperations.class)@EnableConfigurationProperties(RedisProperties.class)//内置了对lettuce和jedis的支持//但是默认只添加了lettuce的依赖,因此默认是使用的lettuce@Import({LettuceConnectionConfiguration.class,JedisConnectionConfiguration.class})publicclassRedisAutoConfiguration{@Bean@Cond...
报错了,我们在使用spring-boot-starter-data-redis的时候,不加配置,会报错吗?如果是本地安装的redis就不会,因为spring-boot-starter-data-redis给了默认的值, 修改 参考源码进行修改: 然后看源码的RedisProperties,也是从配置中读取相关连接信息: 应该加一个redis配置文件类如果配置了redis的参数的话,就加载RedisTempla...
TypedTuple 保存集合中的有序元素; 可以查看一下StringRedisTemplate的源码: public StringRedisTemplate() { setKeySerializer(RedisSerializer.string()); setValueSerializer(RedisSerializer.string()); setHashKeySerializer(RedisSerializer.string()); setHashValueSerializer(RedisSerializer.string()); } 1. 2. 3...
报错了,我们在使用spring-boot-starter-data-redis的时候,不加配置,会报错吗?如果是本地安装的redis就不会,因为spring-boot-starter-data-redis给了默认的值, 修改 参考源码进行修改: 然后看源码的RedisProperties,也是从配置中读取相关连接信息: 应该加一个redis配置文件类如果配置了redis的参数的话,就加载RedisTempla...
但是这个说法一看感觉就不正确,于是进行源码分析排查。 定位到spring-boot-starter-data-redis的核心类 org.springframework.cache.interceptor.CacheInterceptor 可以排查到针对注解方法实现的操作位于org.springframework.cache.interceptor.CacheAspectSupport#execute()方法中 代码片段: // Collect any explicit @CachePuts...
这里使用redis-cli取出数据为null的原因解释:因为Template中set值时会先调用序列化器将键和值都序列化为byte字节数组放入redis数据库中,在客户端除非get后的key为“test”使用同样的序列化器序列化后的值,否则取不到值。提出set源码方便理解; final byte[] rawValue = this.rawValue(value); ...
缓存都是通过key-value进行储存的,value或cacheNames必须指定(value是cacheNames的别名),指定多个value用(value = {"value1", "value2"})如果没有指定key,spring会提供一个默认的KeyGenerator,这个KeyGenerator根据参数生成key,如果方法没有参数返回KeyGenerator.EMPTY,如果有一个参数返回这个实例,如果有多个参数返回包含...
了解原理后,我会通过模拟spring-boot-starter-data-redis,并使用Jedis来创建一个处理redis的自定义starter:my-redis-starter。源码下载点我,最后会详细说明自定义starter的创建过程。 在Spring Boot中使用默认的redis客户端只需要 在pom.xml中引入 <dependency> ...
接下来,再看 @EnableAutoConfiguration的源码 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfigurati...