繁体   English   中英

在 Spring Boot 2.2.x 上执行多个 mongo 时,没有可用的“..mongodb.core.convert.MappingMongoConverter”类型的合格 bean

[英]No qualifying bean of type '....mongodb.core.convert.MappingMongoConverter' available when doing multiple mongo on Spring Boot 2.2.x

因此,我按照本指南来设置使用多个 MongoDB 实例(多个 Mongo 实例)的 Spring 启动应用程序,一切正常,直到我使用@EnableMongoAuditing注释。 我查了这个错误并找到了解决办法

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

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

我只将@CreatedDate@LastModifiedData用于审计功能。

目前我正在像这样初始化MappingMongoConverter

@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);
}

但同样的错误发生Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.mongodb.core.convert.MappingMongoConverter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.mongodb.core.convert.MappingMongoConverter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

我的问题可能是如何正确设置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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM