小编典典

Spring Boot 2.1重复reactiveMongoTemplate bean

spring-boot

我有以下Spring Boot @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


阅读 989

收藏
2020-05-30

共1个答案

小编典典

问题AbstractReactiveMongoConfiguration在于您已经细分了。其reactiveMongoTemplate
@Bean方法的签名指出它返回ReactiveMongoOperations。在创建Bean之前,所有可用的类型信息都是如此,并且Bean工厂无法知道该Bean实际上是一个ReactiveMongoTemplate实例。结果,@ConditionaOnMissingBean正在寻找的ReactiveMongoTemplatebean找不到一个,因此尝试定义两个bean。应该在Spring
Data
MongoDB中修复此问题,AbstractReactiveMongoConfiguration以便为其bean提供尽可能多的类型信息。我已经打开DATAMONGO-2355

您可以通过更多使用Spring Boot的自动配置来避免此问题。无需子分类,AbstractReactiveMongoConfiguration您可以:

  1. 使用配置属性spring.data.mongodb.database=mydb来设置数据库。
  2. 使用自动配置的MongoClientbean,而不是定义自己的bean。
  3. 定义自己的MongoCustomConversionsbean,然后将其用于Boot会自动配置的bean。
2020-05-30