No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate' available: expected single matching bean but found 2: redisTemplate,stringRedisTemplate org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate' available: expected single matching bean but found 2: redisTemplate,stringRedisTemplate不通过注入redisTemplate怎么解决这个错误
时间: 2023-09-28 13:05:28 浏览: 341
org.springframework.transaction-3.2.4.RELEASE.jar
5星 · 资源好评率100%
出现这个错误的原因是Spring容器中有两个RedisTemplate实例,而在注入时没有指定具体使用哪个RedisTemplate实例。
可以使用@Qualifier注解指定具体使用哪个RedisTemplate实例。示例代码如下:
```java
public class DataPermissionUtils {
@Autowired
@Qualifier("redisTemplate") // 指定使用名为"redisTemplate"的RedisTemplate实例
private RedisTemplate redisTemplate;
/**
* 获取用户对应的数据权限 传userUid表示获取指定用户的,不传则获取全部的
*
* @param userUid
* @return
*/
public static List<DataPermissionSchemaEo> getDataPermissionsRedis(String userUid) {
RedisTemplate redisTemplate = SpringContextUtils.getBean(RedisTemplate.class); // 这里可以不用获取RedisTemplate实例
Object redisResult = StringUtils.isEmpty(userUid) ?
redisTemplate.opsForValue().get(SystemsConstant.DATA_PERMISSION_SCHEMA)
: redisTemplate.opsForValue().get(SystemsConstant.DATA_PERMISSION_SCHEMA + userUid);
return StringUtils.isEmpty(redisResult.toString()) ?
Collections.emptyList()
: JSONObject.parseArray(redisResult.toString(), DataPermissionSchemaEo.class);
}
}
```
在示例代码中,使用@Autowired注解自动注入RedisTemplate实例,并通过@Qualifier注解指定使用名为"redisTemplate"的RedisTemplate实例。在getDataPermissionsRedis()方法中则可以直接使用RedisTemplate实例,而不需要通过SpringContextUtils.getBean()方法获取RedisTemplate实例。
阅读全文