ReactiveCrudRepository 没有被 Spring 发现注入到其他类中

Posted

技术标签:

【中文标题】ReactiveCrudRepository 没有被 Spring 发现注入到其他类中【英文标题】:ReactiveCrudRepository is not found by Spring to be injected into other classes 【发布时间】:2020-09-25 21:17:30 【问题描述】:

问题:

我有一个 ReactiveCrudRepository,我想在 RestController 中使用它,但 Spring 不再发现它可以注入。在我将存储库重构为响应式之前(之前是 CrudRepository),存储库是由 Spring 找到并注入的。

现在我收到此错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in de.shinythings.microservices.core.product.services.ProductServiceImpl required a bean of type 'de.shinythings.microservices.core.product.persistence.ProductRepository' that could not be found.


Action:

Consider defining a bean of type 'de.shinythings.microservices.core.product.persistence.ProductRepository' in your configuration.

存储库如下所示: link to GitHub

interface ProductRepository : ReactiveCrudRepository<ProductEntity, String> 

    fun findByProductId(productId: Int): Mono<ProductEntity>

其余控制器如下所示: link to GitHub

@RestController
class ProductServiceImpl(
        private val repository: ProductRepository,
        private val mapper: ProductMapper,
        private val serviceUtil: ServiceUtil
) : ProductService  // implementation left out here 

到目前为止我尝试了什么:

我在application.yml 中启用了debug 标志以从输出中了解更多信息,但这并没有产生有用的见解。

我从 ProductServiceImpl 类中删除了 ProductRepository 依赖项,以便在启动 Spring 时不会出现上述错误。

然后我给自己写了一个小测试,专门问ApplicationContextProductRepository

@SpringBootTest
class BeanLoadingDebugging 

    @Autowired
    private lateinit var applicationContext: ApplicationContext

    @Test
    fun test() 
        val bean = applicationContext.getBean(ProductRepository::class.java)

        Assert.notNull(bean, "Bean not found!")
    

这也行不通!

所以看来这个存储库只是不想被发现。我仔细检查了这一点,并尝试了与非反应性 CrudRepository 相同的方法,并找到了这一点。 ????‍♂️

全面披露:

我是 Spring / Spring Boot 的新手,很高兴在这里获得任何建议。

The complete code can be found on GitHub.

【问题讨论】:

【参考方案1】:

首先,您必须将依赖项从 org.springframework.boot:spring-boot-starter-data-mongodb 更新为 org.springframework.boot:spring-boot-starter-data-mongodb-reactive

其次,启用响应式支持,如下所示,

@SpringBootApplication
@ComponentScan("de.shinythings")
@EnableReactiveMongoRepositories 
class RecommendationServiceApplication

在这两个更改之后,我可以看到测试de.shinythings.microservices.core.recommendation.BeanLoadingDebugging 成功。

更多地关注Spring reactive mongo

【讨论】:

非常感谢!添加缺少的依赖项修复了它。不需要添加@EnableReactiveMongoRepositories

以上是关于ReactiveCrudRepository 没有被 Spring 发现注入到其他类中的主要内容,如果未能解决你的问题,请参考以下文章

ReactiveCrudRepository 在春季使用 Hibernate

将 Spring Data 的 ReactiveCrudRepository 应用到 Redis

WebFlux 和 Kotlin 在多模块应用程序中使用 ReactiveCrudRepository

Webflux postgresql

找不到类型 Pairs 的属性 findAll

Spring数据r2dbc和分页