問題場景:
在模塊A服務中,把字典表中的數據加載到redis緩存中,在本服務A中通過key可以正常獲取數據,但是在模塊B服務、模塊C等服務中通過key卻獲取不到對應的數據
分析解決:
1、這種問題一般是由于RedisTemplate類型的泛型影響所致,也就是說在SpringBoot項目啟動成功之后,Spring容器中會有多個同名(同Id)的 redisTemplate 實例對象
2、Spring容器中為什么會有多個 redisTemplate 實例對象,因為 RedisTemplate有帶泛型的和不帶泛型的接口類,所以Spring初始化生成 redisTemplate 的 Bean對象時候就會分別注冊帶泛型和不帶泛型的Bean,甚至注冊Bean更細分到String、Object等類型
3、所以我們在注入使用 RedisTemplate 對象的時候,就不能優先以類型注入了,因為以類型注入的時候并不知到取哪個泛型的實例對象,所以用 @Autowired 注入就會出現無法精準注入對應泛型的實例對象
4、總結就是注入 RedisTemplate 實例時,要用優先以名稱注入的方式 @Resource,如果用 @AutoWired 注入服務之間就無法正常通過Redis的key獲取value值