Could not safely identify store assignment for repository

问题描述

环境: spring boot 2.0.4
java: 1.8
项目中使用了 mysql 和 redis

控制台输出

2018-08-30 17:21:51.860  INFO 10028 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2018-08-30 17:22:44.407  INFO 10028 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2018-08-30 17:23:15.410  INFO 10028 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.service.account.dao.access.ApplicationRegisterRepository.
2018-08-30 17:23:19.017  INFO 10028 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.service.account.dao.access.ApplicationTokenRepository.
2018-08-30 17:23:20.936  INFO 10028 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.service.account.dao.access.OrganizationRepository.

参考了: https://docs.spring.io/spring...
https://stackoverflow.com/que...

加入类似以下代码

@EnableJpaRepositories(basePackages = "com.acme.repositories.jpa")
@EnableMongoRepositories(basePackages = "com.acme.repositories.mongo")
interface Configuration { }

但仍然不行

阅读 26.7k
4 个回答

直接禁用redis的repositories

spring.data.redis.repositories.enabled = false

这是 Spring Boot 的 Autoconfigure 包干的好事,里面有个叫 RedisRepositoriesAutoConfiguration 的类会检查当前的 classpath 里面是不是存在 Jedis 和 @EnableRedisRepositories,如果存在,无论你的代码有没有用,他都会帮你自动启用这个注解(不带参数),于是整个 classpath 的类都会被扫进去。

解决方法也很简单,RedisRepositoriesAutoConfiguration 里面会判断 spring.data.redis.repositories.enable 这个配置项是否存在,不存在、存在和值为 true 都会生效,只要显式设置它为 false 即可;如果不想写配置信息,也不需要用 RedisRepository 的话(不影响 RedisTemplate),可以通过另外一个判断条件——检查 RedisRepositoryFactoryBean 这个 Bean 是否存在来处理,默认是不存在则执行这个 AutoConfiguration,只要自己在代码里造一个 RedisRepositoryFactoryBean 即可,比如这样

@Bean
public RedisRepositoryFactoryBean redisRepositoryFactoryBean() {
    return null;
}

让这个 Bean 存在(虽然是 null)就不会执行

你的repository是如何写的?
有没有加@Repository的annotation?
Redis的包有没有加?
Redis的相关配置有没有配好?

新手上路,请多包涵

老铁你解决没有啊,我看这个官方文档上面写的是如果使用jpa或mongo特定的注释就可以解决这个问题,虽然不影响,看着也难受

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题