【发布时间】:2016-11-17 21:13:33
【问题描述】:
当我尝试从 Spring Data Redis 注入实现 CrudRepository 的存储库时,我得到 NoSuchBeanDefinitionException。
原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [bluh.bluh.repository.XxxRepository] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
无论配置如何,它都使用 @EnableRedisRepositories("bluh.bluh.repository")
进行注释@Configuration
@EnableRedisRepositories
public class ApplicationConfig {
@Bean
RedisConnectionFactory connectionFactory() {
return new JedisConnectionFactory();
}
@Bean
RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
return template;
}
}
存储库界面如下:
import org.springframework.data.repository.CrudRepository;
public interface XxxRepository extends CrudRepository<String, String> { }
我经历过http://docs.spring.io/spring-data/redis/docs/current/reference/html/,对我来说没有什么新鲜事。我想知道我错过了什么,我将不胜感激。
我使用 Spring Data Redis 1.7.2.RELEASE、Spring Boot 1.3.6.RELEASE
【问题讨论】:
-
没有符合条件的 bean 类型...什么类型的?您可以发布完整的异常消息吗?
-
Spring Data Redis 存储库仅适用于复杂类型。您的存储库将
String声明为域类。使用String标识符是可以的。通常的声明类似于interface XxxRepository extends CrudRepository<Xxx, String> { }或interface PersonRepository extends CrudRepository<Person, String> { }。这就是你没有创建 bean 的原因。 -
不。复杂类型也会发生同样的事情。果然我试过xxx。我的 Xxx 看起来像 @RedisHash("xxx") public class Xxx { @Id private String xxxId; }
-
你能提供一个可重现的测试用例吗? Gist 还是 Github 存储库?
标签: java spring spring-data-redis