我有以下 Spring Boot@Configuration
class:
@Configuration
@EnableReactiveMongoRepositories
class MongoConfiguration : AbstractReactiveMongoConfiguration()
{
override fun reactiveMongoClient() = MongoClients.create()
override fun getDatabaseName() = "mydb"
override fun customConversions(): MongoCustomConversions =
MongoCustomConversions(listOf(ZonedDateTimeReadConverter(), ZonedDateTimeWriteConverter()))
}
应用程序无法启动,并记录以下消息:
无法注册类路径资源 [org/springframework/boot/autoconfigure/data/mongo/MongoReactiveDataAutoConfiguration.class] 中定义的 bean“reactiveMongoTemplate”。具有该名称的 bean 已在类路径资源 [com/mypackage/MongoConfiguration.class] 中定义,并且覆盖被禁用。
这让我很困惑,因为reactiveMongoTemplate
本方法在MongoReactiveDataAutoConfiguration
配置有@ConditionalOnMissingBean
.
问题在于AbstractReactiveMongoConfiguration
您已对其进行了子分类。其签名reactiveMongoTemplate
@Bean
方法声明它返回ReactiveMongoOperations
。在创建 bean 之前,这就是所有可用的类型信息,并且 bean 工厂无法知道该 bean 实际上是一个ReactiveMongoTemplate
实例。结果,@ConditionaOnMissingBean
那正在寻找一个ReactiveMongoTemplate
bean 找不到一个,因此尝试定义这两个 bean。这应该在 Spring Data MongoDB 中修复,以便AbstractReactiveMongoConfiguration
为其 bean 提供尽可能多的类型信息。我已经打开了DATAMONGO-2355 https://jira.spring.io/browse/DATAMONGO-2355.
您可以通过更多地利用 Spring Boot 的自动配置来避免该问题。而不是子类化AbstractReactiveMongoConfiguration
你可以:
- 使用配置属性
spring.data.mongodb.database=mydb
设置数据库。
- 使用自动配置的
MongoClient
bean 而不是定义您自己的。
- 定义你自己的
MongoCustomConversions
然后将使用该 bean 来支持引导自动配置的 bean。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)