我正在将应用程序从使用 MongoDB Java 驱动程序 v. 3.6.4 迁移到 v. 4.1.1
在3.6.4中配置是通过MongoClientOptions传递的
@Bean
public MongoClientOptions mongoOptions() {
return MongoClientOptions.builder()
.connectTimeout(...)
.serverSelectionTimeout(..)
.socketTimeout(...)
.build();
}
Run Code Online (Sandbox Code Playgroud)
在4.1.1中,MongoClientOptions已被弃用,我正在利用MongoClientSettings类 http://mongodb.github.io/mongo-java-driver/4.1/apidocs/mongodb-driver-core/com/mongodb/MongoClientSettings.Builder.html
@Bean
public MongoClientSettings mongoOptions() {
return MongoClientSettings.builder()
.applyToSocketSettings(builder ->
builder.applySettings(builder()
.connectTimeout(config.getConnectTimeout(), MILLISECONDS).build()))
.applyToClusterSettings(builder ->
builder.serverSelectionTimeout(config.getServerSelectionTimeout(), MILLISECONDS).build())
.build();
}
Run Code Online (Sandbox Code Playgroud)
但是,我找不到配置 connectTimeout 的设置(除了通过 applyConnectionString 方法提供连接字符串之外)。
是的,我花了一段时间才弄清楚这一点。
连接超时和套接字超时现在都在 SocketSettings 中(后者重命名为 readTimeout)。
所以它看起来像下面这样(您可以用您的输入替换 1):
@Bean
public MongoClientSettings mongoSetting() {
return MongoClientSettings.builder()
.applyToSocketSettings(builder -> {
builder.connectTimeout(1, MILLISECONDS);
builder.readTimeout(1, MILLISECONDS);
})
.applyToClusterSettings( builder -> builder.serverSelectionTimeout(1, MILLISECONDS))
.applyConnectionString(new ConnectionString("<your-connection-string>"))
.build();
}
Run Code Online (Sandbox Code Playgroud)
我发现需要在此处设置连接字符串(除了通过 spring.data.mongodb.uri 设置之外)。去搞清楚。