在Spring Boot中设置Mongo Timeout

Noo*_*yed 7 spring mongodb spring-boot

我正在使用连接到mongo db的spring boot web应用程序,它正在开箱即用.我只使用以下属性:

spring.data.mongodb.host=myHost
spring.data.mongodb.port=27017
spring.data.mongodb.database=myDatabase
spring.data.mongo.repositories.enabled=true
spring.data.mongodb.username=myUser
spring.data.mongodb.password=myPassword
Run Code Online (Sandbox Code Playgroud)

MongoDB的默认超时是10秒.我想配置超时.我试过做 spring.data.mongodb.socketTimeout=2spring.data.mongodb.connectionTimeout=2

这些属性都不起作用.这是我可以在属性中指定的东西,Spring框架会处理它,或者有人可以举例说明通过声明Bean来实现它.

Ber*_*eux 12

这将覆盖Spring Boot自动配置:

@Configuration
public class MongoDbSettings {

    @Bean
    public MongoClientOptions mongoOptions() {
        return MongoClientOptions.builder().socketTimeout(2000).build();
    }

}
Run Code Online (Sandbox Code Playgroud)


Jes*_*sse 9

要按照您的主题,这将是最好的回答您的问题.看起来您想在application.properties文件中设置超时.

为此:

代替

spring.data.mongodb.host=myHost
spring.data.mongodb.port=27017
spring.data.mongodb.database=myDatabase

spring.data.mongodb.username=myUser
spring.data.mongodb.password=myPassword
Run Code Online (Sandbox Code Playgroud)

试试这个

spring.data.mongodb.uri=mongodb://myUser:myPassword@myHost:27017,myHost:27017/myDatabase?serverSelectionTimeoutMS=2000&connectTimeoutMS=2000
spring.data.mongodb.database=myDatabase
spring.data.mongo.repositories.enabled=true
Run Code Online (Sandbox Code Playgroud)

将时间(以毫秒为单位)修改为所需时间.


Ank*_*hal 5

MongoClientOptions是一个具有所需属性的类。

以编程方式 如果您以编程方式配置了 MongoDB,那么下面的代码片段可以帮助您。

DB mongoDb;

MongoClient mongoClient = new MongoClient(new ServerAddress(url, port), 
                            MongoClientOptions.builder()
                            .socketTimeout(3000)
                            .minHeartbeatFrequency(25)
                            .heartbeatSocketTimeout(3000)
                            .build());
mongoDb = mongoClient.getDB(dbname);
Run Code Online (Sandbox Code Playgroud)

XML 配置 - 高级

<beans>

  <mongo:mongo host="localhost" port="27017">
    <mongo:options connections-per-host="8"
                   threads-allowed-to-block-for-connection-multiplier="4"
                   connect-timeout="1000"
                   max-wait-time="1500}"
                   auto-connect-retry="true"
                   socket-keep-alive="true"
                   socket-timeout="1500"
                   slave-ok="true"
                   write-number="1"
                   write-timeout="0"
                   write-fsync="true"/>
  </mongo:mongo/>

</beans>
Run Code Online (Sandbox Code Playgroud)

另请参阅此处以获取完整文档。


Joh*_*ibe 5

对于带有 Reactive MongoDb 的 Spring Data:

我的情况有点不同(我关闭了连接 - 抛出“Caused by: java.lang.IllegalStateException: state should be: open”)

但是你可以在你的情况下使用它。

应用程序.yml:

spring.data.mongodb:
  host: localhost
  database: myDb
  port: 27017
  username: admin
  password: test
Run Code Online (Sandbox Code Playgroud)

如果您的实现使用MongoReactiveAutoConfiguration来创建 bean,那么您可以使用此 bean 对其进行配置:

@Bean
public MongoClientSettings mongoClientSettings() {
    final MongoClientSettings clientSettings = MongoClientSettings.builder()
            .retryWrites(true)
            .applyToConnectionPoolSettings((ConnectionPoolSettings.Builder builder) -> {
                builder.maxSize(300) //connections count
                        .minSize(100)
                        .maxConnectionLifeTime(0, TimeUnit.MILLISECONDS)
                        .maxConnectionIdleTime(0, TimeUnit.MILLISECONDS)
                        .maxWaitTime(5000, TimeUnit.MILLISECONDS)
                        .maxWaitQueueSize(5000);
            })
            .applyToSocketSettings(builder -> {
                builder.connectTimeout(2000, TimeUnit.MILLISECONDS);
            })
            .applicationName("app")
            .build();

    return clientSettings;
}
Run Code Online (Sandbox Code Playgroud)

  • 对于任何使用最新版本的 spring 的人来说,这是正确的答案。 (2认同)