先简单记录一下解决方案,以后有空详细补下断点过程。
我用的版本如下
<groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.2.0.RELEASE</version>
有一个需求需要切换DB写入数据,然后在网上找到的大多数解决方案如下:
LettuceConnectionFactory lettuceConnectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
lettuceConnectionFactory.setDatabase(2);
redisTemplate.setConnectionFactory(lettuceConnectionFactory );
lettuceConnectionFactory.resetConnection();
使用后发现不起作用,于是断点追根溯源,发现原来resetConnnection()方法只会释放Connection对象,RedisClient中的redisUrl对象的属性并未刷新,导致重新生成的Connection对象的DB值仍未改变,随意切换未生效。
随后寻找刷新RedisClient的方法,最终解决方案如下:
lettuceConnectionFactory.afterPropertiesSet(),在最后调用此方法即可刷新RedisClient,刷新时会自动取lettuceConnectionFactory内部属性的DB值填充,DB切换成功。