MongoDB Java Driver 4.1.1 如何配置超时设置

fg7*_*8nc 10 java mongodb

我正在将应用程序从使用 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 方法提供连接字符串之外)。

Dav*_*gal 9

是的,我花了一段时间才弄清楚这一点。

连接超时和套接字超时现在都在 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 设置之外)。去搞清楚。