[英]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.