2017-01-20 26 views
3

我想降低spring-mongo java應用程序中的超時設置(如果數據庫無法訪問,查詢應該在300 ms後失敗)。Spring mongo查詢設置自定義超時

我嘗試這樣配置:

@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)); 
}