SpringBoot Jar包配置独立Redis

872 阅读1分钟

需求

  假设项目中对于共用功能独立了一个plugin-starter项目(maven管理引入),里面涉及到http调用外部获取数据,针对http请求的部分数据加了Redis缓存。由于plugin里使用当前微服务配置的Redis,如果某个微服务更新了数据,会有其他微服务无法同步更新缓存的问题。

思路

  既然是数据无法同步,plugin-starter独立使用一个Redis即可解决这个问题。

  1. 首先要保证各微服务不用修改redisTemplate的装配。所以需要在plugin-starter项目使用spring.redis默认的配置注入一个spring bean “redisDefaultTemplate”,并使用@Primary注解。
  2. 自定义Redis配置项。并使用spring的Configuration注解获取配置参数。
  3. 使用第2步的配置实例化一个bean “redisPluginTemplate”。 plugin-starter项目使用@Qualifier装配bean “redisPluginTemplate”,按需使用。

编码实现

实现spring.redis默认配置的bean redisDefaultTemplate

  查看RedisAutoConfiguration源码,发现使用的是@ConditionalOnMissingBean,即项目可以自定义redisTemplate bean来覆盖默认的bean。
  所以增加一个自定义的bean “redisDefaultTemplate”覆盖默认配置。

自定义Redis配置项

  创建RedisTemplateConfiguration,自动获取配置文件的配置。

配置bean

  实现redis连接工厂。       通过自定义配置的redis实例化一个bean。

测试

  测试类注入时指定bean,测试自定义bean。注入时不指定bean,测试spring.redis标准配置是否生效。