【问题标题】:How would I connect to two Mongo repositories with AbstractReactiveMongoConfiguration如何使用 AbstractReactiveMongoConfiguration 连接到两个 Mongo 存储库
【发布时间】:2021-12-14 03:11:00
【问题描述】:
我使用单个 mongo 存储库的配置如下所示:
@Configuration
@EnableMongoRepositories
public class ApplicationConfig extends AbstractReactiveMongoConfigutation {
@Autowired
private Environment env;
@Value("${spring.data.mongodb.uri}")
private String mongoUri;
@Override
protected String getDatabaseName(){
return env.getProperty("spring.data.mongodb.database");
}
@Override
protected void configureClientSettings(MongoClientSettings.Builder builder){
builder.applyConnectionString(new ConnectionString(mongoUri)));
}
}
如何创建另一个 mongodb 连接实例?我尝试使用另一个连接字符串创建第二个配置类,但它没有用。谢谢
【问题讨论】:
标签:
java
spring
mongodb
spring-boot
azure-cosmosdb
【解决方案1】:
您可以使用MongoTemplate 实例来完成此操作。您可以指定 mongoDB 的多个模板。
你可以得到整个想法here
你的 application.properties 是这样的:
#--- Primary MongoDB ---#
spring.data.mongodb.uri=mongodb://admin:root@127.0.0.1:27017/primary
#--- Secondary MongoDB ---#
mongodb.uri=mongodb://admin:root@127.0.0.1:27017/secondary
你的配置类:
@Configuration
class MultipleMongoConfig {
@Primary
@Bean(name = ["primaryMongoProperties"])
@ConfigurationProperties(prefix = "spring.data.mongodb")
fun getPrimary() : MongoProperties {
return MongoProperties()
}
@Bean(name = ["secondaryMongoProperties"])
@ConfigurationProperties(prefix = "MongoDB")
fun getSecondary() : MongoProperties {
return MongoProperties()
}
@Primary
@Bean(name = ["primaryMongoTemplate"])
fun primaryMongoTemplate() : MongoTemplate {
return MongoTemplate(primaryMongoDatabaseFactory(getPrimary()))
}
@Bean(name = ["secondaryMongoTemplate"])
fun secondaryMongoTemplate() : MongoTemplate {
return MongoTemplate(secondaryMongoDatabaseFactory(getSecondary()))
}
@Primary
@Bean
fun primaryMongoDatabaseFactory(mongo : MongoProperties) : MongoDatabaseFactory {
return SimpleMongoClientDatabaseFactory(
mongo.uri
)
}
@Bean
fun secondaryMongoDatabaseFactory(mongo : MongoProperties) : MongoDatabaseFactory {
return SimpleMongoClientDatabaseFactory(
mongo.uri
)
}
}
您必须禁用 mongo 的 authoconfig:
@SpringBootApplication(exclude = [MongoAutoConfiguration::class,
MongoDataAutoConfiguration::class])