当前位置: 首页 > 知识库问答 >
问题:

Spring依赖注入在添加Spring启动程序数据redis依赖项后找不到存储库bean

赵涵亮
2023-03-14

我有一个spring启动项目(版本2.3.3.RELEASE),它使用spring Webflux、spring数据和R2DBC。在我添加以下依赖项之前,它一直运行良好:

implementation 'org.springframework.boot:spring-boot-starter-data-redis'

之后,Spring无法启动,因为它无法解析此对象的依赖关系:

interface BookingCountRepository : ReactiveCrudRepository<BookingCount, String> {
...
}

错误消息如下:

2021-12-22 10:20:59,916 [main]    ERROR [] o.s.b.d.LoggingFailureAnalysisReporter - __***************************_APPLICATION FAILED TO START_***************************__Description:__Parameter 1 of constructor in xx.xx.xx.xx.BookingService required a bean of type 'xx.xx.xx.xx.BookingCountRepository' that could not be found.___Action:__Consider defining a bean of type 'xx.xx.xx.xx.BookingCountRepository' in your configuration._

如果我删除spring boot starter data redis依赖项,问题就不会发生。

我的预感是,这可能是一个依赖地狱问题,org.springframework.boot: spall-boot-starter-data-r2dbc和org.springframework.boot: spall-boot-starter-data-redis之间存在冲突。但我不确定。

有人遇到过这个问题吗?如果你遇到过,你是如何解决这个问题的?

仅供参考:JVM运行时是OpenJDK 11,语言是静态编程语言,Spring启动版本是2.3.3。释放

共有1个答案

曹智
2023-03-14

我能够找到一个解决方案,所以我在这里发帖,因为其他人可能会面临同样的问题。

问题的原因是在同一个项目中使用了多个spring数据模块(r2dbc和redis)。由于ReactiveCrudepository是一个通用接口,可以分配给Redis和R2DBC,因此必须采取措施确保Spring DI加载正确的Spring数据模块。

在这种情况下,解决方案是使BookingCountRepository直接从R2dbcRepository继承:

interface BookingCountRepository : R2dbcRepository<BookingCount, String> {
...
}

之后,一切都会正常工作。

文档中的更多信息:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.multiple-模块

注意:有些方法,比如在@EnableR2dbcRepository注释中通知base Packages不起作用。

 类似资料:
  • 当我将下面的依赖项添加到pom.xml时 以下错误来了 2018-05-31 12:02:38.217信息1416---[ost-startStop-1]j.LocalContainerEntityManagerFactoryBean:为持久化单元“默认”初始化JPA EntityManager工厂2018-05-31 12:01:39.233错误1416---[ost-startStop.1]o

  • 问题内容: 我有一个具有简单场景(表单)的Java FX基本应用程序。我有一个Mysql Db,我正在使用Spring JPA(spring数据jpa,即存储库/实体)与之交互。 现在,由于我们知道javaFx有一些生命周期挂钩,即:init()start()和stop()。 假设我想使用JPA save() 方法在数据库中插入数据。通常,如果是我的控制器,则进行正常的数据库注入,例如: 本来可以

  • 我想向Springbean注入一个单例对象依赖关系。问题是我无法访问和修改要注入其对象的类。让我描述一下这个例子。 所以我有我的接口,以及这个接口的实现,如下所示。 然后在我的配置类中,我正在创建一个bean,但是我需要在构造函数中向它传递对象,问题是我不能使成为bean,因为它来自外部包,我不能修改它。 所以我想做的是,能够将/autowire参数传递给bean。目前IntelliJ给我一个错误

  • 问题内容: 我想将依赖项注入。但是,我的方法不起作用。我可以看到Spring正在调用我的setter方法,但是稍后在调用when时,该属性为。 这是我的设置: ServletContextListener: web.xml :(这是文件中的最后一个侦听器) applicationContext.xml: 输出: 实现此目的的正确方法是什么? 问题答案: 我通过删除侦听器bean并为我的属性创建了一

  • 我有一个Maven多模块项目,在主pom中将一些旧版本的Spring Boot依赖项设置为父项。xml。所有子模块都从这个主pom继承Spring Boot依赖项。xml。 这很好,但是在一个新的子模块(也是多模块)中,我想使用最新的Spring引导版本,而不改变项目中正在使用的版本(以及所有依赖项)。 有没有办法巧妙地覆盖从父版本派生的Spring引导版本(及其所有依赖项),并在子模块中使用不同

  • 我尝试将Spring Boot应用程序从spring-data-redis 1.6.4.release升级到1.7.2.release,方法是将spring-data-redis依赖项添加到POM中,同时保持spring-boot-starter-redis不变(使用Spring Boot 1.3.5 release)。升级的应用程序启动失败,出现以下错误: 原因:java.lang.abstra