|
1 | 1 | /*
|
2 |
| - * Copyright 2015 the original author or authors. |
| 2 | + * Copyright 2015-2017 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
18 | 18 | import javax.net.SocketFactory;
|
19 | 19 | import javax.net.ssl.SSLSocketFactory;
|
20 | 20 |
|
| 21 | +import org.springframework.beans.DirectFieldAccessor; |
21 | 22 | import org.springframework.beans.factory.config.AbstractFactoryBean;
|
22 | 23 | import org.springframework.data.mongodb.MongoDbFactory;
|
| 24 | +import org.springframework.data.mongodb.util.MongoClientVersion; |
23 | 25 |
|
24 | 26 | import com.mongodb.DBDecoderFactory;
|
25 | 27 | import com.mongodb.DBEncoderFactory;
|
@@ -62,6 +64,7 @@ public class MongoClientOptionsFactoryBean extends AbstractFactoryBean<MongoClie
|
62 | 64 | private int heartbeatConnectTimeout = DEFAULT_MONGO_OPTIONS.getHeartbeatConnectTimeout();
|
63 | 65 | private int heartbeatSocketTimeout = DEFAULT_MONGO_OPTIONS.getHeartbeatSocketTimeout();
|
64 | 66 | private String requiredReplicaSetName = DEFAULT_MONGO_OPTIONS.getRequiredReplicaSetName();
|
| 67 | + private int serverSelectionTimeout = -1; |
65 | 68 |
|
66 | 69 | private boolean ssl;
|
67 | 70 | private SSLSocketFactory sslSocketFactory;
|
@@ -250,17 +253,33 @@ public void setSslSocketFactory(SSLSocketFactory sslSocketFactory) {
|
250 | 253 | this.sslSocketFactory = sslSocketFactory;
|
251 | 254 | }
|
252 | 255 |
|
253 |
| - /* |
| 256 | + /** |
| 257 | + * Set the {@literal server selection timeout} in msec for a 3.x MongoDB Java driver. If not set the default value of |
| 258 | + * 30 sec will be used. |
| 259 | + * |
| 260 | + * @param serverSelectionTimeout in msec. |
| 261 | + */ |
| 262 | + public void setServerSelectionTimeout(int serverSelectionTimeout) { |
| 263 | + this.serverSelectionTimeout = serverSelectionTimeout; |
| 264 | + } |
| 265 | + |
| 266 | + /* |
254 | 267 | * (non-Javadoc)
|
255 | 268 | * @see org.springframework.beans.factory.config.AbstractFactoryBean#createInstance()
|
256 | 269 | */
|
257 | 270 | @Override
|
258 | 271 | protected MongoClientOptions createInstance() throws Exception {
|
259 | 272 |
|
260 |
| - SocketFactory socketFactoryToUse = ssl ? (sslSocketFactory != null ? sslSocketFactory : SSLSocketFactory |
261 |
| - .getDefault()) : this.socketFactory; |
| 273 | + SocketFactory socketFactoryToUse = ssl |
| 274 | + ? (sslSocketFactory != null ? sslSocketFactory : SSLSocketFactory.getDefault()) : this.socketFactory; |
| 275 | + |
| 276 | + MongoClientOptions.Builder builder = MongoClientOptions.builder(); |
| 277 | + |
| 278 | + if (MongoClientVersion.isMongo3Driver() && serverSelectionTimeout > 0) { |
| 279 | + new DirectFieldAccessor(builder).setPropertyValue("serverSelectionTimeout", serverSelectionTimeout); |
| 280 | + } |
262 | 281 |
|
263 |
| - return MongoClientOptions.builder() // |
| 282 | + return builder // |
264 | 283 | .alwaysUseMBeans(this.alwaysUseMBeans) //
|
265 | 284 | .connectionsPerHost(this.connectionsPerHost) //
|
266 | 285 | .connectTimeout(connectTimeout) //
|
|
0 commit comments