java - 如何使用 AbstractReactiveMongoConfiguration 连接到两个 Mongo 存储库
问题描述
我使用单个 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 连接实例?我尝试使用另一个连接字符串创建第二个配置类,但它没有用。谢谢
解决方案
您可以使用MongoTemplate
实例来做到这一点。您可以指定 mongoDB 的多个模板。你可以在这里得到整个想法
你的 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])
推荐阅读
- android - 为什么 ViewPager 需要手动指定高度?
- php - 我应该在生产代码库上使用 Symfony Flex 吗?
- selenium - 将自定义数据添加到 Cucumber 报告
- r - 聚类向量在 R 中得到一个零一矩阵
- python - Python:如何通过在 Python 编辑器中发出命令从桌面调用和运行 Python 脚本?
- c++ - 需要帮助使用指针打印二维数组
- mathjax - 为没有分隔符的自定义标签执行 MathJax
- sql - 带有索引视图的 SQL Merge 语句
- reactjs - 带有空字符串的反应钩子'useState()'在输入字段中显示一些默认值
- python - 根据相同的键删除 pandas 中的行