Java 没有类型为';的限定bean;。。。。mongodb.core.convert.MappingMongoConverter';在Spring Boot 2.2.x上执行多个mongo时可用

Java 没有类型为';的限定bean;。。。。mongodb.core.convert.MappingMongoConverter';在Spring Boot 2.2.x上执行多个mongo时可用,java,spring,spring-data,spring-data-mongodb,Java,Spring,Spring Data,Spring Data Mongodb,因此,我将遵循这一点来设置使用多个MongoDB实例(多个Mongo实例)的Spring boot应用程序。在使用@EnableMongoAuditing注释之前,一切都运行良好。我已查找此错误并发现 您还需要将环境中可用的MappingMongoConverter通过管道传输到MongoTemplate中,即使用新的MongoTemplate(dbFactory、converter)。您使用的构造函数是为了方便,一次性使用。我们通常建议使用AbstractMongoConfiguration,

因此,我将遵循这一点来设置使用多个MongoDB实例(多个Mongo实例)的Spring boot应用程序。在使用
@EnableMongoAuditing
注释之前,一切都运行良好。我已查找此错误并发现

您还需要将环境中可用的MappingMongoConverter通过管道传输到MongoTemplate中,即使用新的MongoTemplate(dbFactory、converter)。您使用的构造函数是为了方便,一次性使用。我们通常建议使用AbstractMongoConfiguration,以防您想要定制任何特定于MongoDB的内容,因为这样可以确保组件正确地连接在一起

我不能使用
AbstractMongoConfiguration
类,因为它应该用于单个实例MongoDB

我只使用
@CreatedDate
@LastModifiedData
作为审核功能

目前我正在初始化
映射MongoConverter
,如下所示

@Bean(name = SecondaryMongoConfig.MONGO_TEMPLATE)
public MongoTemplate secondaryMongoTemplate() throws Exception {
    MongoDbFactory factory = secondaryFactory(this.mongoProperties.getSecondary());
    MongoMappingContext mctx = new MongoMappingContext();

    mctx.initialize();
    DbRefResolver dbRef = new DefaultDbRefResolver(factory);
    MappingMongoConverter mconv = new MappingMongoConverter(dbRef, mctx);

    mconv.afterPropertiesSet();
    return new MongoTemplate(primaryFactory(this.mongoProperties.getSecondary()),mconv);
}
但是由于以下原因引起的相同错误发生
:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为“org.springframework.data.mongodb.core.converter.MappingMongoConverter”的合格bean可用:至少需要1个符合autowire候选条件的bean。依赖项批注:{}


我的问题可能是如何正确设置
MappingMongoConverter
以修复所述错误我通过在
MultipleMongoConfig
类文件中定义以下bean解决了这个问题

@Bean
public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory,
                       MongoMappingContext context, BeanFactory beanFactory)
{
    context.setInitialEntitySet(new HashSet<>(Arrays.asList(Person.class, Animal.class,
            Program.class)));
    context.initialize();

    DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
    MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);

    try {
        mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
    } catch (NoSuchBeanDefinitionException ignored) {} // Swallow error

    return mappingConverter;
}

@Bean
public MongoProperties mongoProperties() {
    // not exactly sure which property should I return
    return this.mongoProperties.getSecondary();
}
@Bean
公共映射MongoConverter映射MongoConverter(MongoDB工厂,
MongoMappingContext上下文,BeanFactory BeanFactory)
{
context.setInitialEntitySet(新的HashSet(Arrays.asList)(Person.class、Animal.class、,
程序类),;
context.initialize();
DbRefResolver DbRefResolver=新的默认DbRefResolver(工厂);
MappingMongoConverter mappingConverter=新的MappingMongoConverter(dbRefResolver,上下文);
试一试{
setCustomConversions(beanFactory.getBean(CustomConversions.class));
}捕获(忽略NoSuchBeanDefinitionException){}//Swallow错误
返回映射转换器;
}
@豆子
公共MongoProperties MongoProperties(){
//不确定我应该归还哪一处房产
返回此.mongoProperties.getSecondary();
}

为什么不尝试自动连线它<代码>@Autowired private MappingMongoConverter MappingMongoConverter@amer我不认为这会起作用,因为我正在定义自己的配置,无论如何,我找到了解决方案,希望它能帮助其他也在使用Spring的2个mongo db实例的人。