![](/img/trans.png)
[英]How to update part of a document inside an array? (MongoDB SpringBoot Reactive)
[英]How to create multiple reactive MongoDB connectors with SpringBoot
我有一个 SpringBoot 应用程序,它当前使用自动配置连接到 MongoDB。 我需要添加更多的 MongoDB 数据源。
我试图手动创建它们,但我很难找到正确的配置。
我发现Spring: 2 Repositories out of a single Entity and Multiple MongoDB connector with Spring Boot但底层类已过时并且抛出错误:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Timeout on blocking read for 5000000000 NANOSECONDS
Spring Boot 自动配置适用于一个数据源,但不支持多个连接器。
为此,我们必须手动创建 Repository 实例,但由于它们是从接口动态实现的,因此无法创建具体实例并添加参数。
ReactiveMongoTemplate
bean。 这将被 Spring 用来创建新的ReactiveRepositories
实例ReactiveRepository
实例。@Configuration
并指定ReactiveRepository
实例所在的包(参见下面的示例)
//# 1. Disable autoconfig
@SpringBootApplication(exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class
})
public class XyzApplication {
...
}
//# 2. Create reactive template beans
package com.xyz.config;
...
@Configuration
public class MultipleMongoConfig {
@Value("${mongodb.primary.uri}")
private String mongodbPrimaryUri;
@Value("${mongodb.readonly.uri}")
private String mongodbSecondaryUri;
@Primary
@Bean
public ReactiveMongoTemplate primaryMongoTemplate() {
return new ReactiveMongoTemplate(
new SimpleReactiveMongoDatabaseFactory(
new ConnectionString(mongodbPrimaryUri)));
}
@Primary
@Bean
public ReactiveMongoTemplate secondaryMongoTemplate() {
return new ReactiveMongoTemplate(
new SimpleReactiveMongoDatabaseFactory(
new ConnectionString(mongodbSecondaryUri)));
}
}
步骤 1 和 2 将替换 Spring 自动配置。 然后 3 和 4 将使用此配置
//# 3. Create Reactive repositories
// PrimaryRepository.java
package com.xyz.primary;
@Repository
public interface PrimaryRepository extends ReactiveMongoRepository<Xyz, String> {}
// SecondaryRepository.java
pacakge com.xyz.secondary;
@Repository
public interface SecondaryRepository extends ReactiveMongoRepository<Xyz, String> {}
//# 4. Create specifig configs
// PrimaryMongoConfig.java
package com.xyz.config;
...
@Configuration
@EnableReactiveMongoRepositories(
basePackages = "com.xyz.primary",
reactiveMongoTemplateRef = "primaryMongoTemplate")
public class PrimaryMongoConfig {}
// SecondaryMongoConfig.java
pacakge com.xyz.config;
...
@Configuration
@EnableReactiveMongoRepositories(
basePackages = "com.xyz.secondary",
reactiveMongoTemplateRef = "secondaryMongoTemplate")
public class SecondaryMongoConfig {}
basePackage
SimpleReactiveMongDatabaseFactory
是使用连接字符串创建的,其中包括密码和数据库名称,您必须注意如何外部化此配置。 还有一个构造函数,但是我没有去尝试创建一个单独的 MongoClient 实例spring.data.mondgodb.uri
,但我发现创建单独的属性更好:使用mongodb.primary.uri
和mongodb.secondary.uri
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.