当我尝试从Spring Data Redis注入实现CrudRepository的存储库时,我得到NoSuchBeanDefinitionException。
引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[bluh.bluh.repository.XxxRepository]的限定bean用于依赖:预期至少有1个bean符合此依赖关系的autowire候选者。依赖注释:{@ 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
答案 0 :(得分:2)
我遇到了同样的问题,并意识到这是一个版本问题。
我使用的是spring-boot v1.3.8,并将spring-data-redis v1.7.5作为依赖项。当我尝试使用这些版本自动装配spring-data-redis存储库时,我收到了上述问题中发布的错误。
我尝试升级到spring-boot v.1.4.2。这个版本的spring-boot带有一个名为&#34; spring-boot-starter-data-redis&#34;这降低了spring-data-redis v1.7.5和jedis v2.8.2。我遵循文档中提供的相同配置,我终于开始工作了!
我猜测spring-boot v1.3.8和spring-data-redis v1.7.x存在一些兼容性问题。这有点得到证实,因为spring-boot 1.3.8带有一个名为spring-boot-starter-redis的启动器,它降低了spring-data-redis的v1.6.5。由于@EnableRedisRepositories注释仅包含在1.7。+中,因此看起来需要升级才能使存储库功能正常工作。
tl; dr尝试将spring boot升级到version.latest,然后从spring-boot-starter-data-redis中获取spring-data-redis。
答案 1 :(得分:1)
有点迟到但对于其他任何有此问题的人:
我只是坐着把头发拉出来。下载了GIT示例并注意到该实体已使用@RedisHash(“hash_name_here”)注释:
@RedisHash("MyDataThingies")
public class MyDataThingy{
@Id
public String id
}
现在它有连接问题,但我知道原因:)
答案 2 :(得分:1)
我有类似的问题。在我的情况下,版本不是问题,但注释需要明确的basePackages
,如下所示:
@EnableRedisRepositories(basePackages = "my.base.pkg")