2017-01-20 7 views
3

Я хотел бы снизить значение тайм-аута в приложении java Spring-Mongo (запрос должен завершиться с ошибкой через 300 мс, если база данных недоступна).Запросы Spring mongo set custom timeout

Я попробовал этот конфиг:

@Configuration 
public class MongoConfiguration { 

private String mongoUri = "mongodb://127.0.0.1:27017/myDb?connectTimeoutMS=300&socketTimeoutMS=300&waitQueueTimeoutMS=300&wtimeoutMS=300"; 

@Bean 
public MongoDbFactory mongoDbFactory() throws Exception { 
    Builder options = new MongoClientOptions.Builder().socketTimeout(300).connectTimeout(300).maxWaitTime(300); 
    return new SimpleMongoDbFactory(new MongoClientURI(mongoUri, options)); 
} 

@Bean 
public MongoTemplate mongoTemplate() throws Exception { 
    MongoDbFactory mongoDbFactory = mongoDbFactory(); 
    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory); 
    return mongoTemplate; 
} 

} 

Но варианты mongoUri ни строитель изменить таймаут: запрос не выполняется только после 30 000ms.

Я не уверен, какой параметр мне следует переопределить или как правильно его выполнить.

Спасибо за вашу помощь

<dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>3.4.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.9.5.RELEASE</version> 
    </dependency> 

ответ

6

Я нашел ответ здесь: https://scalegrid.io/blog/understanding-mongodb-client-timeout-options/

@Bean 
public MongoDbFactory mongoDbFactory() throws Exception { 
    MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder(); 
    optionsBuilder.connectTimeout(300); 
    optionsBuilder.socketTimeout(300); 
    optionsBuilder.serverSelectionTimeout(300); 
    return new SimpleMongoDbFactory(new MongoClientURI(mongoUri, optionsBuilder)); 
}