【发布时间】:2017-11-28 10:50:17
【问题描述】:
我的配置类有一些依赖 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 创建错误 资源 [org/springframework/boot/autoconfigure/redis/RedisAutoConfiguration$RedisConfiguration.class]: 通过构造函数参数表达的不满足的依赖关系 类型索引 0 [org.springframework.data.redis.connection.RedisConnectionFactory]: : 没有符合条件的 bean 类型 [org.springframework.data.redis.connection.RedisConnectionFactory] 是 已定义:预期的单个匹配 bean,但找到了 2: 地理JedisConnectionFactory,容量JedisConnectionFactory;嵌套的 例外是 org.springframework.beans.factory.NoUniqueBeanDefinitionException: 否 符合条件的 bean 类型 [org.springframework.data.redis.connection.RedisConnectionFactory] 是 已定义:预期的单个匹配 bean,但找到了 2: 地理JedisConnectionFactory,容量JedisConnectionFactory
【问题讨论】:
-
实际上错误消息很清楚:预期的单个匹配 bean 但找到了 2. 使用 @Qualifier 的 bean 定义。
-
@Habil 我已经使用
@Qualifier定义了 Bean,即使它说没有找到匹配的 bean。同类型问题stackoverflow.com/questions/36621090/… -
试试这样的bean def; @Bean(name="bean1") public JedisConnectionFactory geographyJedisConnectionFactory() { JedisConnectionFactory connectionFactory = new JedisConnectionFactory();返回连接工厂; } @Bean(name="bean2") public JedisConnectionFactory capacityJedisConnectionFactory() { JedisConnectionFactory connectionFactory = new JedisConnectionFactory();返回连接工厂; }
-
虽然 name() 属性可用,但确定 bean 名称的默认策略是使用 @Bean 方法的名称。这是方便和直观的,但如果需要显式命名,可以使用名称属性(或其别名值)。您能否解释一下需要明确设置
@Bean("bean1")以获得更多docs.spring.io/spring-framework/docs/current/javadoc-api/org/…
标签: java spring spring-boot