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 时不会出现上述错误。
然后我给自己写了一个小测试,专门问ApplicationContext
ProductRepository
:
@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