在不明确指定连接字符串的情况下自动装配 MongoClient 和 MongoClientSettings
Autowiring MongoClient and MongoClientSettings without explicitly specifying a Connection String
我正在升级 MongoDB 驱动程序,这需要从较旧的 MongoClientOptions
转移到较新的 MongoClientSettings
。
在旧的实现中,在 @Configuration class 中使用了以下配置,ConnectionString 从 spring.data.mongodb.uri
和 @Autowired MongoTemplate
推断:
@Bean
public MongoClientOptions mongoOptions() {
Builder clientOptionsBuilder = MongoClientOptions.builder()
//Timeout Configurations
if(sslIsEnabled) {
clientOptionsBuilder.sslEnabled(true)
//Other SSL options
}
return clientOptionsBuilder.build();
}
而在较新的实现中,特别需要一个 ConnectionString 参数,并且不会自动选择 属性 文件 spring.data.mongodb.uri
。因此,我使用 @Value
注释指定了连接字符串。不这样做会导致程序将 localhost:27017
推断为连接源。
@Value("${spring.data.mongodb.uri}")
String connectionString;
@Bean
public MongoClient mongoClient() {
MongoClientSettings.Builder clientSettingsBuilder = MongoClientSettings.builder()
.applyToSocketSettings(builder -> {
// Timeout Configurations
}).applyConnectionString(new ConnectionString(connectionString));
if (sSLEnabled) {
clientSettingsBuilder.applyToSslSettings(builder -> {
builder.enabled(sslIsEnabled);
//Other SSL Settings
});
}
return MongoClients.create(clientSettingsBuilder.build());
}
虽然文档和其他 Whosebug 帖子提到 MongoClientSettings 会覆盖 属性 文件条目,但有没有办法从 属性 文件中 retrieve/infer MongoClientSettings,然后将其他自定义配置附加到是吗?
我正在使用 Spring Boot 2.6 和 spring 启动器依赖项 MongoDB
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
我发现之前 GitHub 上有人问过类似的问题。
Modify MongoClientSettings while using auto configuration with mongodb #20195
将具有 MongoClientOptions
的 @Bean
配置替换为 MongoClientSettingsBuilderCustomizer
有助于解决问题。
@Bean
public MongoClientSettingsBuilderCustomizer mongoDBDefaultSettings()
throws KeyManagementException, NoSuchAlgorithmException {
return builder -> {
builder.applyToSocketSettings(bldr -> {
//Apply any custom socket settings
});
builder.applyToSslSettings(blockBuilder -> {
// Apply SSL settings
});
// Apply other settings to the builder.
};
}
我正在升级 MongoDB 驱动程序,这需要从较旧的 MongoClientOptions
转移到较新的 MongoClientSettings
。
在旧的实现中,在 @Configuration class 中使用了以下配置,ConnectionString 从 spring.data.mongodb.uri
和 @Autowired MongoTemplate
推断:
@Bean
public MongoClientOptions mongoOptions() {
Builder clientOptionsBuilder = MongoClientOptions.builder()
//Timeout Configurations
if(sslIsEnabled) {
clientOptionsBuilder.sslEnabled(true)
//Other SSL options
}
return clientOptionsBuilder.build();
}
而在较新的实现中,特别需要一个 ConnectionString 参数,并且不会自动选择 属性 文件 spring.data.mongodb.uri
。因此,我使用 @Value
注释指定了连接字符串。不这样做会导致程序将 localhost:27017
推断为连接源。
@Value("${spring.data.mongodb.uri}")
String connectionString;
@Bean
public MongoClient mongoClient() {
MongoClientSettings.Builder clientSettingsBuilder = MongoClientSettings.builder()
.applyToSocketSettings(builder -> {
// Timeout Configurations
}).applyConnectionString(new ConnectionString(connectionString));
if (sSLEnabled) {
clientSettingsBuilder.applyToSslSettings(builder -> {
builder.enabled(sslIsEnabled);
//Other SSL Settings
});
}
return MongoClients.create(clientSettingsBuilder.build());
}
虽然文档和其他 Whosebug 帖子提到 MongoClientSettings 会覆盖 属性 文件条目,但有没有办法从 属性 文件中 retrieve/infer MongoClientSettings,然后将其他自定义配置附加到是吗?
我正在使用 Spring Boot 2.6 和 spring 启动器依赖项 MongoDB
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
我发现之前 GitHub 上有人问过类似的问题。
Modify MongoClientSettings while using auto configuration with mongodb #20195
将具有 MongoClientOptions
的 @Bean
配置替换为 MongoClientSettingsBuilderCustomizer
有助于解决问题。
@Bean
public MongoClientSettingsBuilderCustomizer mongoDBDefaultSettings()
throws KeyManagementException, NoSuchAlgorithmException {
return builder -> {
builder.applyToSocketSettings(bldr -> {
//Apply any custom socket settings
});
builder.applyToSslSettings(blockBuilder -> {
// Apply SSL settings
});
// Apply other settings to the builder.
};
}