我的配置类包含一些Dependent Beans
public class WebConfig{
@Bean
@Qualifier("geojedis")
public StringRedisTemplate geoJedisTemplate(
@Qualifier("geographyJedisConnectionFactory") final JedisConnectionFactory connectionFactory) {
// Create a RedisTemplate implementation which is basically of string
// data structure.
StringRedisTemplate redisTemplate = new StringRedisTemplate(connectionFactory);
return redisTemplate;
}
@Bean
@Qualifier("capacityStringRedisTemplate")
public StringRedisTemplate capacityStringRedisTemplate(
@Qualifier("capacityJedisConnectionFactory") final JedisConnectionFactory connectionFactory) {
// Create a RedisTemplate implementation which is basically of string
// data structure.
StringRedisTemplate redisTemplate = new StringRedisTemplate(connectionFactory);
return redisTemplate;
}
@Bean
public JedisConnectionFactory geographyJedisConnectionFactory() {
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
return connectionFactory;
}
@Bean
public JedisConnectionFactory capacityJedisConnectionFactory() {
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
return connectionFactory;
}
}
但我收到以下错误。当我检查配置时,一切都很好,我还定义了Qualifier
来映射正确的依赖项。非常感谢任何帮助。
org.springframework.beans.factory.UnsatisfiedDependencyException: 在类路径中定义名为'redisTemplate'的bean时出错 资源 [组织/ springframework的的/ boot /自动配置/ Redis的/ RedisAutoConfiguration $ RedisConfiguration.class]: 通过构造函数参数表示不满意的依赖关系 索引0的类型 [org.springframework.data.redis.connection.RedisConnectionFactory] :: 没有合格的bean类型 [org.springframework.data.redis.connection.RedisConnectionFactory]是 已定义:预期单个匹配bean但找到2: geographyJedisConnectionFactory,capacityJedisConnectionFactory;嵌套 例外是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有 合格的bean类型 [org.springframework.data.redis.connection.RedisConnectionFactory]是 已定义:预期单个匹配bean但找到2: geographyJedisConnectionFactory,capacityJedisConnectionFactory
答案 0 :(得分:3)
如果没有默认的" redisTemplate"则会在RedisAutoConfiguration中创建一个bean。在Spring Context中。
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
这个需要一个RedisConnectionFactory
,但找到两个。
作为一种解决方法,您可以使用名称&#34; redisTemplate&#34;创建一个虚拟RedisTemplate。而不是使用它。
由于它通过bean名称进行检查,只要没有尝试@Autowire就可以满足以下条件:
@Bean
public Object redisTemplate() {
return new Object();
}
答案 1 :(得分:1)
您只需调用连接工厂bean创建方法而不是注入:
@Bean
public StringRedisTemplate capacityStringRedisTemplate() {
// Create a RedisTemplate implementation which is basically of string
// data structure.
StringRedisTemplate redisTemplate =
new StringRedisTemplate(capacityJedisConnectionFactory());
return redisTemplate;
}
这将直接指向您要找的那个