我有以下Spring Boot @Configuration类:
@Configuration
@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”。已经在类路径资源[com / mypackage / MongoConfiguration.class]中定义了具有该名称的Bean,并且禁用了覆盖。
这让我感到困惑,因为中的reactiveMongoTemplateben方法MongoReactiveDataAutoConfiguration配置了@ConditionalOnMissingBean。
reactiveMongoTemplate
MongoReactiveDataAutoConfiguration
@ConditionalOnMissingBean
问题AbstractReactiveMongoConfiguration在于您已经细分了。其reactiveMongoTemplate @Bean方法的签名指出它返回ReactiveMongoOperations。在创建Bean之前,所有可用的类型信息都是如此,并且Bean工厂无法知道该Bean实际上是一个ReactiveMongoTemplate实例。结果,@ConditionaOnMissingBean正在寻找的ReactiveMongoTemplatebean找不到一个,因此尝试定义两个bean。应该在Spring Data MongoDB中修复此问题,AbstractReactiveMongoConfiguration以便为其bean提供尽可能多的类型信息。我已经打开DATAMONGO-2355。
AbstractReactiveMongoConfiguration
@Bean
ReactiveMongoOperations
ReactiveMongoTemplate
@ConditionaOnMissingBean
您可以通过更多使用Spring Boot的自动配置来避免此问题。无需子分类,AbstractReactiveMongoConfiguration您可以:
spring.data.mongodb.database=mydb
MongoClient
MongoCustomConversions