添加spring-boot-starter-data-redis依赖后Spring Boot启动报错
你遇到的问题核心是:引入spring-boot-starter-data-redis后,Spring Data同时检测到JPA和Redis两个数据模块,触发了严格仓库配置模式。在这种模式下,Spring Data不会自动推断每个Repository对应的存储类型,而com.atlassian.connect.spring.AtlassianHostRepository这个JPA仓库没有被明确分配给JPA模块,导致Spring无法创建它的Bean实例,最终引发依赖注入异常。
你可以通过明确区分JPA和Redis Repository的扫描路径来解决这个问题,具体步骤如下:
- 创建一个数据配置类(或者直接在Spring Boot启动类上添加注解),分别指定JPA和Redis各自的Repository扫描范围:
import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.redis.repository.config.EnableRedisRepositories; @Configuration // 明确让JPA模块扫描AtlassianHostRepository所在的包 @EnableJpaRepositories(basePackages = "com.atlassian.connect.spring") // 替换成你项目中Redis Repository实际所在的包路径 @EnableRedisRepositories(basePackages = "your.project.redis.repositories") public class DataRepositoryConfig { }
如果你的项目暂时没有自定义Redis Repository,可以把
@EnableRedisRepositories的basePackages设置为一个不存在的包(比如com.placeholder.redis),这样Redis模块不会扫描到任何Repository,同时也不会干扰JPA模块的正常工作。重新启动项目,此时Spring Data会明确知道
com.atlassian.connect.spring下的Repository由JPA模块处理,Redis模块负责指定包下的Repository,就能正常创建AtlassianHostRepository的Bean了。
那些额外出现的日志信息正是Spring Data进入严格模式的直接提示:
Multiple Spring Data modules found, entering strict repository configuration mode!
Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.atlassian.connect.spring.AtlassianHostRepository.
这说明Spring Data无法确定AtlassianHostRepository该归属哪个数据模块,所以没有为它创建Bean,这就是问题的核心所在。
内容的提问来源于stack exchange,提问作者Shiv

